例如,对于下面的xml
<CATALOG>
<CD title="Empire Burlesque"/>
<CD title="empire burlesque"/>
<CD title="EMPIRE BURLESQUE"/>
<CD title="EmPiRe BuRLeSQuE"/>
<CD title="Others"/>
<CATALOG>
Run Code Online (Sandbox Code Playgroud)
如何将前4条记录与xpath匹配//CD[@title='empire burlesque'].是否有xpath函数来执行此操作?其他解决方案,如PHP函数也被接受.
Mat*_*hen 102
XPath 2具有小写(和大写)字符串函数.这与不区分大小写的不完全相同,但希望它足够接近:
//CD[lower-case(@title)='empire burlesque']
Run Code Online (Sandbox Code Playgroud)
如果您使用的是XPath 1,那么使用translate会有一个hack.
Mad*_*sen 52
matches()是一个XPATH 2.0函数,允许不区分大小写的正则表达式匹配.
其中的标志是i不区分大小写的匹配.
以下XPATH使用带有不区分大小写标志的matches()函数:
//CD[matches(@title,'empire burlesque','i')]
Run Code Online (Sandbox Code Playgroud)
一种可能的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")];
Run Code Online (Sandbox Code Playgroud)
这在Chrome开发者工具中无法找到元素,我希望在屏幕上找到"提交"按钮
//input[matches(@value,'submit','i')]
Run Code Online (Sandbox Code Playgroud)
但是,使用'translate'将所有大写字母替换为小作品,如下所示
//input[translate(@value,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz') = 'submit']
Run Code Online (Sandbox Code Playgroud)
更新:我刚刚找到了'匹配'无效的原因.我正在使用Chrome与xpath 1.0,它不会理解'匹配'的语法.它应该是xpath 2.0
小智 9
对于 selenium xpath 小写将不起作用...翻译将有帮助案例 1:
情况 2 : (包含) //[contains(translate(@id,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'login_field')]
情况 3 :对于 Text 属性 //*[contains(translate(text(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),'username')]