寻找XML解析器

时间:2008-12-15 20:58:33

标签: xml dom xpath parsing

我的任务是找到一个开源的DOM XML解析器。解析器必须最低限度地支持XPath 1.0。需要架构支持,但不是交易破坏者

我们正在解析的文件很小,因此速度和内存消耗不是很大的问题。

任何OO语言(C ++,C#,Java等)。

为了澄清,计划是将XML解析器集成到比使用外部解析器更紧密的应用程序中。我们正在创建一个基于XML的自适应对象模型(更改XML,更改对象模型。)为此,我们需要将解析器集成到一个非常低的级别。这导致需要体验的优雅程度(感谢Yoder先生)。如果我们没有能力通过XPath导航这个对象模型,那么优雅的一部分就会消失。

我们已经创建了一个使用操作系统提供的解析器的原型。它工作得很好,但是遇到了复杂性和性能问题。但是,嘿,这是一个原型。现在我想做真实的事情,我可以从头开始编写解析器。 (我已经完成了那部分而且它有点容易。)现在,XPath引擎是一个不同的故事。我很确定我不会在周末完成那件事。

5 个答案:

答案 0 :(得分:1)

优秀的Jaxen可能对您有用。它是用于JDom和Dom4J的Java XPath实现。

在重构遍历两个DOM实现的通用功能时,您现在拥有一个可以查询任何树形模型的XPath引擎。您只需要编写他们称之为导航器的东西,这相对来说比较简单。

来自FAQ

  

如何支持其他对象模型?

     

唯一需要的是一个   接口的实现   org.jaxen.Navigator。不是全部   接口是必需的,也是默认的   实施,以形式   org.jaxen.DefaultNavigator也是   提供。

     

因为许多XPath轴都可以   彼此定义(for   例如,祖先轴只是一个   父递归应用),仅   一些低级轴迭代器   最初开始时需要。的   当然,你可以实现它们   直接而不是依靠   jaxen的构图能力。

我发现这些写得比较快。

答案 1 :(得分:0)

为了更好地回答这个问题,我认为你需要提供更多的背景信息。话虽如此,我发现支持Linq to XML的.NET 3.5中的Xml的新对象模型(XElement等)使得XML导航变得非常庞大,而且我确实意味着一个数量级,比使用DOM更容易和更好

答案 2 :(得分:0)

如果您允许使用C#,那么您是不是可以使用C#标准库?他们有缺陷吗?

java相同吗?这一切都始于C ++。我不明白缺乏。

Google搜索“XML解析器XPATH”发现了很多针对CPAN,JDOM和J2SE,可可,MSXML等的点击。

您是刚开始搜索,还是标准答案不足?

编辑:

您的澄清向我建议您不想使用它,您想使用源在您自己的XML解析器中启动您自己的XPATH模块吗?那是对的吗?你不关心语言,因为你想要的只是设计,而不是代码?

答案 3 :(得分:0)

如果你想要的只是设计逻辑,而不是代码,你可以研究Ruby的REXML库。它是OO并且非常好并且具有完整的XPath支持。

MRI有C和Ruby实现。 JRuby有一个Java实现。

答案 4 :(得分:0)

可能是一个很长的镜头,但jQuery显然支持XPath语法来引用DOM;我认为它的源代码是可访问的。