2

StAXを使用してXMLファイルを解析していますが、各タグの開始位置と終了位置を知りたいです。そのために私はを使おうとしてgetLocation().getCharacterOffset()いますが、最初以降のすべてのタグに対して誤った値を返します。

XMLInputFactory factory = XMLInputFactory.newInstance();
XMLEventReader reader = factory.createXMLEventReader(
        new StringReader("<root>txt1<tag>txt2</tag></root>"));

XMLEvent e;
e = reader.nextEvent(); // START_DOCUMENT
System.out.println(e);
System.out.println(e.getLocation());
e = reader.nextEvent(); // START_ELEMENT "root"
System.out.println(e);
System.out.println(e.getLocation());
e = reader.nextEvent(); // CHARACTERS "txt1"
System.out.println(e);
System.out.println(e.getLocation());
e = reader.nextEvent(); // START_ELEMENT "tag"
System.out.println(e);
System.out.println(e.getLocation());

上記のコードはこれを出力します:

<?xml version="null" encoding='null' standalone='no'?>
Line number = 1
Column number = 1
System Id = null
Public Id = null
Location Uri= null
CharacterOffset = 0

<root>
Line number = 1
Column number = 7
System Id = null
Public Id = null
Location Uri= null
CharacterOffset = 6

txt1
Line number = 1
Column number = 12
System Id = null
Public Id = null
Location Uri= null
CharacterOffset = 11

<tag>
Line number = 1
Column number = 16
System Id = null
Public Id = null
Location Uri= null
CharacterOffset = 15

<root>CharacterOffset正しく6ですが、その後txt111見たいと思っています10。正確にどのオフセットを返しますか?

4

1 に答える 1

2

これはおそらく、Sun/OracleのStAX実装のバグ/機能です。Woodstoxを使用すると、が得られますが0, 0, 6, 10、これは正しいようです。http://wiki.fasterxml.com/WoodstoxHomeからWoodstoxをダウンロードし、JAR(woodstox-core + stax2-api)をクラスパスに追加します。次に、 XMLInputFactoryWoodstoxの実装を自動的に選択します。

于 2012-09-30T18:21:00.210 に答える