获取XML元素的字节/字符偏移量

5

我想知道在Java中哪个XML解析器(如果有的话)可以提供它解析的xml元素的字节偏移量。

我正在使用Lucene索引我的XML文件,当我搜索特定单词时,我需要输出包括XML元素、文件名以及字节偏移量,以便我可以快速地定位到该偏移量。

2个回答

4
请查看VTD-XML:http://vtd-xml.sourceforge.netVTDNav.getContentFragment()编码了元素的偏移量和长度:javadoc。您可以通过将其转换为int (int) VTDNav.getContentFragment()来获取偏移量。

嗨,Pratik。我正在一个项目上工作,我认为这可能会对我有所帮助。你成功让它工作了吗? - Puneet

0

考虑使用StAX (javax.xml.stream),这是一个开始的示例:

    XMLInputFactory f = XMLInputFactory.newInstance();
    XMLStreamReader xr = f.createXMLStreamReader(new FileReader("test.xml"));
    while (xr.hasNext()) {
        int n = xr.next();
        Location l = xr.getLocation();
        switch (n) {
        case XMLStreamReader.START_ELEMENT:
            System.out.println(l.getColumnNumber());
            System.out.println(l.getLineNumber());
                                ... more 
            break;
        }
    }

谢谢Evgeniy。我不确定行号和列号将如何转换为字节/字符偏移量,因为每行可能具有可变数量的字节。 - Pratik
1
问题在于SAX、DOM和StAX解析器都只能提供char偏移量。如果后台流使用可变长度的字节字符串(UTF-8),那么除非它们控制字节流到字符流的转换,否则它们无法提供字节偏移量。我知道的唯一提供字节偏移量的API是VTD API,即使你将Reader而不是InputStream传递给它,它也无法提供字节偏移量。 - Stephen Connolly
所有的StAX解析器仍然使用char偏移量吗?或者他们中的任何一个现在已经修复了这个错误?API文档明确说明,当您传入字节流或文件时,getCharacterOffset()返回字节偏移量。 - Hakanai
请查看以下基于ANTLR解析器的不同解决方案:https://dev59.com/KaDia4cB1Zd3GeqPKNdv - jschnasse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接