Java XML解析和原始字节偏移
我想将一些格式良好的XML解析为DOM,但我想知道每个节点的标记在原始媒体中的偏移量 例如,如果我有一个XML文档,其内容如下:Java XML解析和原始字节偏移,java,xml,parsing,jaxb,sax,Java,Xml,Parsing,Jaxb,Sax,我想将一些格式良好的XML解析为DOM,但我想知道每个节点的标记在原始媒体中的偏移量 例如,如果我有一个XML文档,其内容如下: <html> <body> <div>text</div> </body> </html> 文本 我想知道在原始媒体中,节点从偏移量13开始,“文本”从偏移量18开始 使用标准的Java XML解析器可以做到这一点吗?JAXB?如果没有容易获得的解决方案,那么在解析路径上需要进行哪些类型的更
<html>
<body>
<div>text</div>
</body>
</html>
文本
我想知道在原始媒体中,节点从偏移量13开始,“文本”从偏移量18开始
使用标准的Java XML解析器可以做到这一点吗?JAXB?如果没有容易获得的解决方案,那么在解析路径上需要进行哪些类型的更改才能实现这一点?SAX API为此提供了一种相当模糊的机制—接口。当您使用SAXAPI时,您将子类化
DefaultHandler
并将其传递给SAX解析方法,SAX解析器实现将通过setDocumentLocator()
向DefaultHandler
注入Locator
。在解析过程中,会调用ContentHandler
上的各种回调方法(例如startElement()
),此时您可以咨询定位器来查找解析位置(通过getColumnNumber()
和getLineNumber()
)
从技术上讲,这是可选的功能,但是javadoc说“强烈鼓励”实现提供它,因此您可以假设内置在JavaSE中的SAX解析器将提供它
当然,这确实意味着使用SAXAPI,这是noone的乐趣所在,但我看不到使用更高级API访问这些信息的方法
编辑:找到。使用XML Streamreader及其getLocation()方法返回location对象。getCharacterOffset()提供当前位置的字节偏移量
import javax.xml.stream.Location;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
public class Runner {
public static void main(String argv[]) {
XMLInputFactory factory = XMLInputFactory.newInstance();
try{
XMLStreamReader streamReader = factory.createXMLStreamReader(
new FileReader("D:\\BigFile.xml"));
while(streamReader.hasNext()){
streamReader.next();
if(streamReader.getEventType() == XMLStreamReader.START_ELEMENT){
Location location = streamReader.getLocation();
System.out.println("byte location: " + location.getCharacterOffset());
}
}
} catch(Exception e){
e.printStackTrace();
}
看一看这个问题,找出大型XML文件中的字符偏移量,以及如何与JAXB一起使用