Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从XML提取值-Xpath还是直接解析?_Xml - Fatal编程技术网

从XML提取值-Xpath还是直接解析?

从XML提取值-Xpath还是直接解析?,xml,Xml,试图找出从复杂XML中提取内容的正确方法。使用关键字,我尝试使用Xpath识别和提取。我需要从PDF文档中提取50多个XML属性。(另存为XML) 现在,我想知道这是不是正确的方法 我是否应该使用DOM解析器解析XML,然后提取所需的内容?有什么想法吗?“对”怎么说?对谁说“对”?作为一名编码员?作为表演?你在寻找哪一个“正确的” 最有可能的是,XPath将是最优雅的: thing = getPathThing(doc, "/path/to/element"); <repeat 50 ti

试图找出从复杂XML中提取内容的正确方法。使用关键字,我尝试使用Xpath识别和提取。我需要从PDF文档中提取50多个XML属性。(另存为XML) 现在,我想知道这是不是正确的方法

我是否应该使用DOM解析器解析XML,然后提取所需的内容?有什么想法吗?

“对”怎么说?对谁说“对”?作为一名编码员?作为表演?你在寻找哪一个“正确的”

最有可能的是,XPath将是最优雅的:

thing = getPathThing(doc, "/path/to/element");
<repeat 50 times>
thing=getPathThing(doc,“/path/to/element”);
这可能是最慢的。它只需要做最多的工作

DOM技术可能会稍微快一点。两者都在DOM中漫游以找到它们的元素。我确信这种差异是可以测量的,我不确定它是否值得注意,如果所有XPath表达式都是预编译的,也不确定。两者都需要将整个文档存储在内存中

最快的方法是运行一些流解析器(即SAX),因为您可以在元素经过时抓取它们。然而,SAX解析器看起来很糟糕。我们有其他机制是有原因的,SAX一点也不特别优雅。但它速度快,内存便宜。它的内存成本与您保存的数据有关,而不是与XML负载的总数据有关


如果您“负担得起”,XPath很可能是代码可维护性方面的最佳选择,否则我会选择SAX。

首先,不要使用DOM。假设您身处Java世界(实际上并没有说),请使用一种更现代的树模型,如XOM或JDOM2。它们更易于使用,特别是在使用名称空间时,它们更快,并且支持您需要的所有功能。人们使用DOM是因为他们没有意识到还有更好的东西

其次,使用树模型和使用XPath并不是相互排斥的。我经常构建树,然后混合使用XPath导航和直接导航:例如,使用XPath查找元素,然后使用直接导航访问其属性。XPath使更复杂的访问路径更易于表达,生成的代码更易于维护,但我不会使用XPath仅从一个元素到它的一个属性


无论您使用什么方法(DOM、SAX、XPath、数据绑定),将数据从XML转换成Java都是一件麻烦事。如果可以避免这种情况,请使用基于XML的语言(如XSLT或XQuery)编写整个应用程序。

可能是,也可能不是。您应该开始接受前面问题的部分答案。谢谢。我自己也在想前面的问题。我如何“接受”答案?没有看到接受或关闭问题的链接。只需单击复选标记。感谢您的回复。是的,你要意识到“正确”是主观的。我只是想知道如果我所做的只是简单的搜索和提取,Xpath是否是推荐的方法。在我的例子中,处理速度不是问题,但准确性是问题。相当肯定Xpath是满足我的需求的正确方法,但我想确定这是一种可接受的方法。