【问题标题】:What version of XPath is implemented in XML::LibXML?什么版本的 XPath 在 XML::LibXML 中实现?
【发布时间】:2014-11-27 14:02:17
【问题描述】:

有谁知道在 XML::LibMXL 中实现了哪个版本的 XPath 规范?

或者更重要的是,我在哪里可以找到我可以在 LibXML 中使用的 XPath 函数的描述?

例如,我尝试过类似

$dcDOM->findvalue('//dc:identifier[contains(@xsi:type,"URI")]');

这似乎工作正常,但是

$dcDOM->findvalue('//dc:identifier[matches(@xsi:type,"URI")]');

没有。

因此必须假设它最多支持 XPath 1.0 或 1.0/2.0 的某个子集。

是否有一个简洁的页面列出并描述了所有内容?

【问题讨论】:

    标签: xml perl xpath libxml2


    【解决方案1】:

    正如您从探测中推测的那样,XML::LibXML 支持 XPath 1.0(不是 2.0)。

    一般来说,XPath 本身没有办法确定版本,只能通过此类探测。另一方面,XSLT 提供system-property('xsl:version') 来识别版本信息。

    走源遗产路线:libxml2 上的 XML::LibXML is based,其中 implements XPath 1.0,如 Libxml2 主页上所述:

    Libxml2 实现了许多与标记相关的现有标准 语言:

         XML Path Language (XPath) 1.0: http://www.w3.org/TR/xpath
    

    你可能会问为什么 libxml2 不支持 XPath 2.0?或阅读old post from maintainer Daniel Veillard,它说 XPath 2.0 规范“太大且太麻烦”,但底线仍然存在:XML::LibXML 支持 XPath 1.0,而不是 2.0。

    【讨论】:

      【解决方案2】:

      XML::LibXML 是 libxml 的一个接口,因此您需要找出您安装的那个版本。具体操作方式取决于您的操作系统,但您可以查看xsltprocxmllint 的版本,例如:

      $ xsltproc --version
      Using libxml 20900, libxslt 10128 and libexslt 817
      xsltproc was compiled against libxml 20900, libxslt 10128 and libexslt 817
      libxslt 10128 was compiled against libxml 20900
      libexslt 817 was compiled against libxml 20900
      

      所以我有 libxml v2.2.9。

      根据百科全智的来源,libxml2只实现了XPath 1.0。

      【讨论】:

      • 好点,但我不知道如何在 Windows 中检查...它必须是 libxml 2.x。但无论如何,从我的问题来看,我认为它支持 XPath 1.0,因为 matches() 不起作用。
      • @jackthehipster 强烈建议它仅是 1.0 的另一件事是文档谈论“节点集”而不是“序列”,并将类型描述为“数字”和“字符串”而不是引用到 v2.0 使用的 XML Schema 类型
      • @jackthehipster 有一个 libxml2 的部分扩展,它实现了一些 XPath2.0 功能here,但它看起来不再是一个持续的关注点。如果需要 XPath 2.0,有一个开源的javascript implementation,saxon (Java) 也支持 XPath 2.0
      【解决方案3】:

      好的,这不是 100% 的答案,但根据 https://stackoverflow.com/a/10655581/2740187(从 2012 年开始)libxml 仅支持 XPath 1.0,此处描述了支持的字符串函数:http://www.w3.org/TR/xpath/#section-String-Functions

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 2015-04-18
        • 1970-01-01
        • 2010-12-27
        • 2011-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多