- PR -

SAX2のcharactersメソッド

1
投稿者投稿内容
未記入
会議室デビュー日: 2005/07/19
投稿数: 4
投稿日時: 2005-07-19 23:08
はじめて投稿いたします。
SAX2でXMLを解析するプログラムを作成しています。
MicrosoftのMSXMLを使って、VC++でプログラミングしています。
ISAXContentHandlerのcharactersメソッドは文字参照(Ꭼのような表記)を実際の文字に変換して引数に渡して来ますが、
変換しないで実際にXMLファイルに記載されているデータのまま引数に渡してもらう方法はないでしょうか?

例. 下記の「倶」部分です。
<?xml version="1.0" encoding="ISO-8859-1" ?>
<car>
<name>&#x5036;</name>
</car>

よろしくお願い致します。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-07-20 09:44
変換しないで実際にXMLファイルに記載されているデータのまま
を xml解釈済 にするのが、 パーサーの基本機能ですから、どうなのでしょう。

1.パーサーを使わない(高速で正しい処理)
2.string を 元のencodingで xml 出力する
未記入
会議室デビュー日: 2005/07/19
投稿数: 4
投稿日時: 2005-07-20 21:24
> 1.パーサーを使わない(高速で正しい処理)

自力でXMLを解析するなど無茶な話です。

> 2.string を 元のencodingで xml 出力する

xml 出力でなく、XMLファイルからデータを取得したいのですが。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2005-07-20 23:07
引用:

変換しないで実際にXMLファイルに記載されているデータのまま引数に渡してもらう方法はないでしょうか?



XMLパーザを使う限り、無理でしょう。

どうしてそういう妙な要求が必要なのかを説明して、別の解決法を探したほうがいいですよ。
未記入
会議室デビュー日: 2005/07/19
投稿数: 4
投稿日時: 2005-07-20 23:45
ご指導ありがとうございます。
XMLファイルを読み込んで、修正後、再度書き込む必要があり、できるだけ元の状態を保持したいためでした。

MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-07-21 09:11
infoset の同一性を基準にしますので、
xmlテキストの同一性は考慮しません、が、スジです。

別のまともな方法としては、パーサーのソースを読んで、
文字番号参照の部分を改造です、
読んだら、元の文字列を返すデバッグの口 が隠れているかも。
----------------------------------------------
xml1.0仕様に完全 適合しないパーサーを探してみる。
小型軽量なのは省略仕様のが 色々ありました。
javascript で100行以下とか。
パリデートしない簡易パーサーなら、パーサー・ジェネレータでも作れるのでは
===========================
こういう、話が出る原因は、
シリアライズが高速にできる「パーサー」は一つもない
とかいうのに、つながるのでしょうか?
あるいは、再構成でなく PDFのデータ形式のように 増分を積み上げるとか。

[ メッセージ編集済み 編集者: MMX 編集日時 2005-07-21 09:33 ]
未記入
会議室デビュー日: 2005/07/19
投稿数: 4
投稿日時: 2005-07-22 10:04
ご教授ありがとうございます。
一般的なパーサを使っては無理なのが判っただけでも助かりました。
ありがとうございました。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2005-07-22 12:38
基本的には「データ内容は変わらない表現上の違いは気にしちゃいけない」です。

ですが、SAXパーザがちゃんとsetDocumentLocator()を呼んでくれるなら、書き換えたい部分の直前の場所と書き換えたい部分の直後の場所を記録し、書き換えたい部分以外は元のドキュメントからコピーして書き換えたい部分のみ自分でシリアライズすればいいかもしれません。この場合でも、書き換えたい部分と同一のイベントに含まれる文字参照は保存できませんが。
1

スキルアップ/キャリアアップ(JOB@IT)