我正在使用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
,但是在txt1
之后是11
,而我希望看到10
。它到底返回什么偏移量? 最佳答案
这可能是Sun / Oracle StAX实现的错误/功能。
使用Woodstox,您会得到0, 0, 6, 10
,这似乎是正确的。
从http://wiki.fasterxml.com/WoodstoxHome下载Woodstox,然后
将JAR(woodstox-core + stax2-api)添加到您的类路径中。然后,XMLInputFactory
将自动选择Woodstox实现。