例如,对于下面的xml
<CATALOG>
<CD title="Empire Burlesque"/>
<CD title="empire burlesque"/>
<CD title="EMPIRE BURLESQUE"/>
<CD title="EmPiRe BuRLeSQuE"/>
<CD title="Others"/>
<CATALOG>
如何将前4条记录与xpath(如//CD[@title='empire burlesque']
)匹配。是否有xpath函数来执行此操作?其他解决方案,如PHP函数也被接受。
答案 0 :(得分:96)
XPath 2具有小写(和大写)字符串函数。这与案例不敏感并不完全相同,但希望它足够接近:
//CD[lower-case(@title)='empire burlesque']
如果您使用的是XPath 1,则会有hack using translate。
答案 1 :(得分:49)
matches()是一个XPATH 2.0函数,允许不区分大小写的正则表达式匹配。
其中一个flags为i
,用于不区分大小写的匹配。
以下XPATH使用带有大小写不敏感标志的matches()函数:
//CD[matches(@title,'empire burlesque','i')]
答案 2 :(得分:9)
一种可能的PHP解决方案:
// 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")];
答案 3 :(得分:7)
这在Chrome开发者工具中无法找到元素,我希望找到“提交”功能。屏幕上的按钮
//input[matches(@value,'submit','i')]
然而,使用&#39;翻译&#39;将所有大写字母替换为小作品,如下所示
//input[translate(@value,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'submit']
更新:我刚刚找到了为什么&#39;匹配&#39;不起作用。我正在使用Chrome与xpath 1.0,它不会理解语法&#39;匹配&#39;。它应该是xpath 2.0
答案 4 :(得分:2)
您提到PHP解决方案是可以接受的,并且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文档。它基本上演示了“php:function”用于布尔值,“php:functionString”用于字符串求值。
答案 5 :(得分:1)
对于 selenium xpath 小写将不起作用...翻译会有所帮助 案例一:
案例 2 :(包含) //[contains(translate(@id,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'login_field')]
case 3 : 对于 Text 属性 //*[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'用户名')]
QA Automator 是云平台上的自动化管理工具,您可以在其中创建、执行和维护自动化测试脚本 https://www.youtube.com/watch?v=iFk1Na_627U&t=53s