StAX APIの実装による動作の違い

JavaでXMLをパースする際にはStAXを使用している。
Java6標準のパーサでも良いけど、Woodstoxをクラスパスに含めると、内部で勝手にWoodstox実装を使ってくれる。

が!APIが同じなのに 動作が微妙に違うので結構ハマる。

今気づいている範囲では次の3点が違う。
バージョンはJava1.6.0_22とWoodstox 4.1.1

・Java標準の場合、Character部分に実体参照(&など)があると、そこでCharacterが分割される。
なのでStartElementを見つけたら次のCharacterElementのデータを取るだけでは、実態参照の手前までしかデータを取ることができない。
Woodstoxの場合は実態参照があっても分割されない。

・Woodstoxの場合、XMLStreamWriter#writeCharactersにnullを入力するとNullPoが発生する。
Java標準の場合、nullを入力しても何も起きない。

・Java標準の場合、XMLStreamWriter#writeCharactersで”>”が”>”に置換されるが、Woodstoxの場合は”>”のまま
普通は問題ないと思うけど、場合によっては問題になるかも。

No Comments

Post a Comment

コメントを投稿するには、下の計算の答えを入力する必要があります。答えは半角数字で入力してください。 * Time limit is exhausted. Please reload the CAPTCHA.