从XML-Xpath或直接解析中提取值?

时间:2013-06-25 23:35:52

标签: xml

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

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

2 个答案:

答案 0 :(得分:0)

“对不对”怎么样?对谁来说“对吧”作为编码员?作为表现?您正在寻找哪个“正确”?

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

thing = getPathThing(doc, "/path/to/element");
<repeat 50 times>

它可能是最慢的。它只需要做大部分工作。

DOM技术可能会稍快一些。两者都走DOM来找到它们的元素。我确定差异是可测量的,我不确定它是否明显,如果所有XPath表达式都是预编译的。两者都要求整个文档都在内存中。

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

如果你能“负担得起”,XPath可能是代码可维护性POV的最佳选择,否则我会忍受并且去SAX。

答案 1 :(得分:0)

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

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

无论您使用何种方法(DOM,SAX,XPath,数据绑定),从XML获取数据都是一件麻烦事。如果你可以避免它,可以用基于XML的语言(如XSLT或XQuery)编写整个应用程序,然后执行。