在xpath中不区分大小写的匹配?

例如,下面的xml

<CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD title="EMPIRE BURLESQUE"/> <CD title="EmPiRe BuRLeSQuE"/> <CD title="Others"/> <CATALOG> 

如何匹配xpath的前4条logging如//CD[@title='empire burlesque'] 。 有xpath函数来做到这一点? 其他解决scheme,如PHPfunction也被接受。

XPath 2有一个小写(和大写)string函数。 这不像大小写不敏感,但希望它会足够接近:

 //CD[lower-case(@title)='empire burlesque'] 

如果您使用的是XPath 1,那么使用translate会有一些破解 。

matches()是一个XPATH 2.0函数,允许区分大小写的正则expression式匹配。

其中一个标志是i不区分大小写的匹配。

使用带有不区分大小写标志的matches()函数的以下XPATH:

 //CD[matches(@title,'empire burlesque','i')] 

一个可能的PHP解决scheme

 // load XML to SimpleXML $x = simplexml_load_string($xmlstr); // index it by title once $index = array(); foreach ($x->CD as &$cd) { $title = strtolower((string)$cd['title']); if (!array_key_exists($title, $index)) $index[$title] = array(); $index[$title][] = &$cd; } // query the index $result = $index[strtolower("EMPIRE BURLESQUE")]; 

您提到PHP解决scheme是可以接受的,而PHP也提供了一种方法来实现这一点,即使它只支持XPath v1.0。 您可以扩展XPath支持以允许PHP函数调用。

 $xpathObj = new DOMXPath($docObj); $xpathObj->registerNamespace('php','http://php.net/xpath'); // (required) $xpathObj->registerPhpFunctions("strtolower"); // (leave empty to allow *any* PHP function) $xpathObj->query('//CD[php:functionString("strtolower",@title) = "empire burlesque"]'); 

有关更多示例,请参阅PHP registerPhpFunctions文档。 它基本上certificate“php:function”用于布尔评估,“php:functionString”用于string评估。

这在Chrome开发人员工具中无法find元素,我正在寻找屏幕上的“提交”button

 //input[matches(@value,'submit','i')] 

但是,使用“翻译”将所有上限replace为小作品如下

 //input[translate(@value,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'submit'] 

更新:我刚刚find“匹配”不起作用的原因。 我正在使用铬xpath 1.0,它不理解语法“匹配”。 它应该是xpath 2.0