我需要解析以下XML
。我需要取名称值。但 name 元素可能不区分大小写。如何编写通用Xpath
压来读取带有name
或Name
元素?
<Employees>
<Employee id="1">
<age>29</age>
<name>Pankaj</name>
<gender>Male</gender>
<role>Java Developer</role>
</Employee>
<Employee id="2">
<age>35</age>
<Name>Lisa</Name>
<gender>Female</gender>
<role>CEO</role>
</Employee>
</Employees>
当我们给出id
作为动态值时,下面的表达式将适用于名称元素。
XPathExpression:
exprs = xpath.compile("/Employees/Employee/@id" + id+ "']/name/text()");
尝试以下XPath
以匹配name
和Name
元素
/Employees/Employee/*[matches(name(), "name", "i")]/text()
/*[matches(name(), "name", "i")]
应该匹配任何名称(name()
(等于"name"
忽略("i"
(大小写的元素(*
你可以试试 XPath translate(( 函数:
翻译(字符串 1,字符串 2,字符串 3(
通过将字符串 2 中的字符替换为字符串 3 中的字符来转换字符串 1
在您的情况下,以下内容:
//Employee/*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='name']";
将:
- 对于每个
Employee
- 检查每个孩子
- 将孩子名称中所有大写字母(
local-name()
(转换为小写 - 将其与"名称"进行比较
有了这个,你不必手动检查每种可能性,也可以重用于其他任何东西;你只需要用你想要检查的单词替换"name"。
进一步阅读:
翻译(( --> https://developer.mozilla.org/fr/docs/XPath/Fonctions/translate
本地名称(( --> https://developer.mozilla.org/fr/docs/XPath/Fonctions/local-name