java - getCharacterOffset() 返回错误值

标签 java stax

我正在使用 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 实现。

关于java - getCharacterOffset() 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12656824/

相关文章:

java - 使用 STaX 解析多个 XML 片段

java - Oracle 是 Java 中 BINARY_INTEGER 类型的 NUMBER(5) 索引表吗?

Java - 64 位系统的类路径问题

java - 在 Java 中使用 BitSet 跟踪前导零

java - 我可以在 Java 中使用验证性较低的 StAX 解析器吗?

java - 有没有办法构建 StAX 过滤器链?

java - 部署 WAR 时为空指针

C# 与 Java 枚举(适用于 C# 新手)

java - 如何配置 JAX-WS 使用的 XML 解析器的行为

java - 向 StAX 解析器提供 DTD 文件