我有一个非常大的XML,我接收它作为输入。在这个XML中,我只需要一个子元素。解析整个XML以仅检索一个元素似乎是一种性能过头。有没有更好的方法来解决这个问题?
一种方法是使用XML解析DocumentBuilder,然后使用XPath检索所需的字段。但是解析方法仍然会不必要地解析整个xml。在解析器的任何实现中是否有一个重载的解析方法,它获取XPath并仅根据xpath解析XML。
发布于 2014-04-08 20:58:33
您需要的是SAX解析器或类似的快速解析器。SAX解析器不会解析整个XML,它们只是解析xml的要点,直到找到所需的元素。
您可以在wikipedia's link中阅读有关SAX解析器的内容。还可以了解一下the java docs for SAX parser
发布于 2014-04-08 21:00:13
虽然没有办法通过解析来正确处理XML数据,但肯定有办法构建整个文档的内存表示。Java提供基于事件的SAX解析。您可以为XML事件实现一个事件处理程序,忽略在访问所需内容的过程中的所有内容,并在检索到要查找的部分后停止。
这是一个tutorial from Oracle showing how to use SAX APIs to retrieve counts of individual tags without building a document in memory。
由于most XPath processors work with SAX as well,您可能会将事件提供给XPath处理器,并以这种方式查找所需的标记。但是,对于需要获取单个元素的情况来说,这可能是一种过度的做法。
发布于 2014-04-08 21:00:46
XPath operates over the document object model.,所以你必须有一个DOM才能计算一个XPath表达式。否则,它将针对什么进行验证?
因此,如果您不想解析文档,则可以使用XPath。其他选项是快速SAX解析,您可以忽略所有SAX解析事件,直到到达所需的元素,提取所需的文本,然后放弃其余的解析过程。
另一种选择是更简单:使用grep.
https://stackoverflow.com/questions/22937716
复制相似问题