Aro*_*ost 85 javascript xml xslt xpath
我正在运行我的DOM的所有文本节点,并检查nodeValue是否包含某个字符串.
/html/body//text()[contains(.,'test')]
Run Code Online (Sandbox Code Playgroud)
这是区分大小写的.但是,我也想抓住Test,TEST奥得TesT.这可能与XPath(在JavaScript中)?
Tom*_*lak 97
这适用于XPath 1.0.如果您的环境支持XPath 2.0,请参阅此处.
是.可能,但不美观.
/html/body//text()[
contains(
translate(., 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
'test'
)
]
Run Code Online (Sandbox Code Playgroud)
如果可以的话,用其他方法标记您感兴趣的文本部分,例如将它们包含在<span>具有某个类的文本中.
如果这不可能,您可以让JavaScript帮助您构建适当的XPath表达式:
function xpathPrepare(xpath, searchString) {
return xpath.replace("$u", searchString.toUpperCase())
.replace("$l", searchString.toLowerCase())
.replace("$s", searchString.toLowerCase());
}
xp = xpathPrepare("//text()[contains(translate(., '$u', '$l'), '$s')]", "Test");
// -> "//text()[contains(translate(., 'TEST', 'test'), 'test')]"
Run Code Online (Sandbox Code Playgroud)
(帽子提示@ KirillPolishchuk的答案 - 当然你只需要翻译那些你正在搜索的字符)
Kir*_*huk 59
更美丽:
/html/body//text()[contains(translate(., 'TES', 'tes'), 'test')]
Run Code Online (Sandbox Code Playgroud)
我一直这样做的方法是使用 XPath 中的“翻译”功能。我不会说它非常漂亮,但它工作正常。
/html/body//text()[contains(translate(.,'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'),'TEST')]
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助,
是.您可以使用translate将要匹配的文本转换为小写,如下所示:
/html/body//text()[contains(translate(.,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz'),
'test')]
Run Code Online (Sandbox Code Playgroud)
如果您正在使用XPath 2.0,则可以将排序规则指定为contains()的第三个参数.但是,排序规则URI不是标准化的,因此详细信息取决于您使用的产品.
请注意,前面使用translate()给出的解决方案都假设您只使用26个字母的英文字母.
| 归档时间: |
|
| 查看次数: |
58160 次 |
| 最近记录: |