- - PR -
SAX インデントTABを含むXMLが読めない
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-12-09 15:53
ttp://www.h7.dion.ne.jp/~matsu/feature/xml/programing/java-sax.html
こちらサイトを参考にしてSAXを使ったXML読み込みプログラムを作りました。 XMLを用意し、実行したところ、データの欠損が40個に1個くらいの割合で発生しました。 いろんなXMLで調査したところ、 原因はXMLの階層に応じ、TABでインデントをいれているのが原因でした。 TABをすべて取り払えさえすれば読めますが、 TABがあってもうまく読める方法はありますでしょうか? | ||||
|
投稿日時: 2005-12-09 16:26
例題は古過ぎませんか
http://www.techscore.com/tech/J2SE/SAX/1.html くらいに 新しく | ||||
|
投稿日時: 2005-12-09 22:57
TABがあるからってデータが欠けたりすることはありません。gocheongさんが書いたコードに問題があるのだと思います。
もっと具体的に、コードやデータを示してみてはいかがでしょう。 | ||||
|
投稿日時: 2005-12-10 14:38
私の勘違いでした
データが欠損したのは規定バッファサイズ2048バイトを越えるXMLファイルを読み込んだからでした。 TABを消してうまくいったのはたまたまでした。 よって32768バイトまでバッファを増やしました SAXParser parser = spfactory.newSAXParser(); parser.setProperty("http://apache.org/xml/properties/input-buffer-size", new Integer(32768)); しかし、これでも32Kバイト以上のXMLファイルを読み込むとデータの欠損が発生します。 今回、このXMLファイルは、DBからの検索結果が格納されたXMLであるため、 XMLのファイルサイズに上限を設けることはできません。 検索範囲が大きそうな場合をあらかじめ想定して決めておき、 分けてXMLを取得するなどの工夫が必要なようです。 どうもありがとうございました。 | ||||
|
投稿日時: 2005-12-10 15:06
そんな必要はありません。 もしかして、XML中の一個のTEXT要素が、必ず1回のcharacters()呼び出しになることを 仮定しておられませんか? SAXの仕様上、characters()呼び出しはパーザの都合によって任意に分割され得るので、 必要ならばアプリ側で文字列を結合してやる必要があります。 | ||||
|
投稿日時: 2005-12-10 23:12
ああ、そういうことですか。確かにそう書いてますね。
ttp://java.sun.com/j2se/1.4/ja/docs/ja/api/org/xml/sax/ContentHandler.html#characters(char[],%20int,%20int) ドキュメントも読まずに勝手な想像をしてしまいました。 すぐ仕様を疑う私は悪い技術者の典型ですね。 すいませんでした。 [ メッセージ編集済み 編集者: gocheong 編集日時 2005-12-10 23:13 ] |
1