当元素不区分大小写时,是否可以使用单个 Xpath 表达式扫描 xml 元素



我需要解析以下XML。我需要取名称值。但 name 元素可能不区分大小写。如何编写通用Xpath压来读取带有nameName元素?

<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以匹配nameName元素

/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']";

将:

  1. 对于每个Employee
  2. 检查每个孩子
  3. 将孩子名称中所有大写字母(local-name()(转换为小写
  4. 将其与"名称"进行比较

有了这个,你不必手动检查每种可能性,也可以重用于其他任何东西;你只需要用你想要检查的单词替换"name"。

进一步阅读:

翻译(( --> https://developer.mozilla.org/fr/docs/XPath/Fonctions/translate

本地名称(( --> https://developer.mozilla.org/fr/docs/XPath/Fonctions/local-name

最新更新