在XML::LibXML中实现了什么版本的XPath?

在XML::LibXML中实现了什么版本的XPath?,xml,perl,xpath,libxml2,Xml,Perl,Xpath,Libxml2,有人知道XML::LibMXL中实现了哪个版本的XPath规范吗 或者更重要的是,在哪里可以找到可以在LibXML中使用的XPath函数的描述 例如,我试过类似的方法 $dcDOM->findvalue('//dc:identifier[contains(@xsi:type,"URI")]'); 这似乎很好,但是 $dcDOM->findvalue('//dc:identifier[matches(@xsi:type,"URI")]'); 没有 因此,我们必须假设它最多支持XPa

有人知道XML::LibMXL中实现了哪个版本的XPath规范吗

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

例如,我试过类似的方法

$dcDOM->findvalue('//dc:identifier[contains(@xsi:type,"URI")]');
这似乎很好,但是

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

因此,我们必须假设它最多支持XPath1.0或1.0/2.0的某个子集


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

好的,这不是100%的答案,但根据(从2012年起)libxml只支持XPath 1.0,支持的字符串函数如下所述:

XML::LibXML是LibXML的接口,因此您需要了解您安装的版本。如何操作取决于您的操作系统,但您可以检查
xsltproc
xmllint
的版本,例如:

$ 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
所以我得到了libxmlv2.2.9


根据《智慧源泉》维基百科的说法,libxml2只实现了XPath1.0。

正如您从调查中推测的那样,XML::LibXML支持XPath1.0(而不是2.0)

一般来说,XPath本身除了通过此类探测之外,无法确定版本。另一方面,XSLT提供
系统属性('xsl:version')
来标识版本信息

走源代码传统路线:libxml2上的XML::LibXML,即XPath 1.0,如libxml2主页上所述:

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

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

您可能会问,为什么libxml2不支持XPath 2.0?或者读一篇文章说XPath 2.0规范“太大、太侵入性了”,但底线仍然是:XML::LibXML支持XPath 1.0,而不是2.0。

这是好的观点,但我不知道如何在Windows中检查这一点。。。它必须是libxml 2.x。但无论如何,从我的问题来看,我假设它支持XPath 1.0,因为matches()不起作用。@jackthehipster这是最快找到答案的方法-在中为$a尝试一些明确的-2.0表达式,如
。返回$a
,看看它是否有问题。@jackthehipster另一件强烈建议它是1.0版本的事情是,文档讨论的是“节点集”而不是“序列”,并将类型描述为“数字”和“字符串”而不是引用v2使用的XML模式类型。0@jackthehipsterlibxml2有一个部分扩展,它实现了一些XPath2.0功能,但它看起来不再是一个持续的产品了。如果您需要XPath2.0,那么有一个开源的,saxon(Java)也支持XPath2.0