我想从XOM文档中查询包含特定值但不区分大小写的节点。像这样:
doc.query('/root/book[contains(.,"case-insentive-string")]')
但包含区分大小写。
contains(translate(."ABCEDF...","abcdef..."),"case-insentive-string")]'
也失败了。有什么建议吗?
答案 0 :(得分:2)
2.我试过包含(翻译(。“ABCEDF ...”,“abcdef ...”),“case-insentive-string”)]' 也失败了。
写这个的正确方法是:
/root/book[contains(translate(., $vUpper, $vLower),
translate($vCaseInsentiveString, $vUpper, $vLower)
)
]
其中$vUpper
和$vLower
被定义为(应该被替换)字符串:
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
和
'abcdefghijklmnopqrstuvwxyz'
和$vCaseInsentiveString
被定义为(应该被替换)特定的不区分大小写的字符串。
例如,给定以下XML文档:
<authors>
<author>
<name>Victor Hugo & Co.</name>
<nationality>French</nationality>
</author>
<author period="classical" category="children">
<name>J.K.Rollings</name>
<nationality>British</nationality>
</author>
<author period="classical">
<name>Sophocles</name>
<nationality>Greek</nationality>
</author>
<author>
<name>Leo Tolstoy</name>
<nationality>Russian</nationality>
</author>
<author>
<name>Alexander Pushkin</name>
<nationality>Russian</nationality>
</author>
<author period="classical">
<name>Plato</name>
<nationality>Greek</nationality>
</author>
</authors>
以下XPath表达式(用相应的字符串替换变量):
/*/author/name
[contains(translate(., $vUpper, $vLower),
translate('lEo', $vUpper, $vLower)
)
]
选择此元素:
<name>Leo Tolstoy</name>
解释: contains()
函数的两个参数都转换为小写,然后执行比较。
答案 1 :(得分:2)
如果您使用的是XOM,那么您可以使用Saxon对其运行XPath或XQuery。这使您能够在XPath 2.0中使用大大增加的函数库,其中包括函数lower-case()和upper-case(),以及选择自己的归类的能力(尽管以某种特定于产品的方式)用于与contains()等函数一起使用 - 这意味着您可以进行匹配,例如忽略重音和大小写。