0

我的任务是寻找一个开源的 DOM XML 解析器。解析器必须至少支持 XPath 1.0。需要模式支持,但不是交易破坏者

我们正在解析的文件会很小,所以速度和内存消耗不是一个大问题。

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

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

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

4

5 回答 5

1

永远优秀的Jaxen在这里可能对你有用。它是用于 JDom 和 Dom4J 的 Java XPath 实现。

在重构出遍历两个 DOM 实现的通用功能时,您现在拥有一个可以查询任何树形模型的 XPath 引擎。你只需要写他们所谓的导航器,写起来比较简单。

常见问题解答

如何支持不同的对象模型?

唯一需要的是接口 org.jaxen.Navigator 的实现。并非所有接口都是必需的,并且还提供了 org.jaxen.DefaultNavigator 形式的默认实现。

由于许多 XPath 轴可以相互定义(例如,祖先轴只是递归应用的父轴),因此只需几个低级轴迭代器即可开始使用。当然,你可以直接实现它们,而不是依赖 jaxen 的组合能力。

我发现写这些相对较快。

于 2008-12-16T14:15:12.723 回答
0

为了很好地回答这个问题,我认为您需要提供更多上下文。话虽如此,我发现支持 Linq to XML 的 .NET 3.5 中用于 XML 的新对象模型(XElement 等)极大地促进了 XML 导航,我的意思是比使用 DOM 更容易和更好的一个数量级

于 2008-12-15T21:09:38.127 回答
0

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

java也一样?而这一切都始于 C++。我不明白缺乏。

谷歌搜索“XML parser XPATH”可以找到很多 CPAN、JDOM 和 J2SE、cocoa、MSXML 等的匹配项。

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

编辑:

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

于 2008-12-16T00:05:48.570 回答
0

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

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

于 2008-12-16T20:07:46.397 回答
0

可能有点远,但 jQuery 显然支持 XPath 语法来引用 DOM;我认为它的源代码是可以访问的。

于 2008-12-17T04:16:46.923 回答