XPath 2.0:按属性检索值不区分大小写的节点

XPath 2.0:按属性检索值不区分大小写的节点,xpath,xml-namespaces,xpath-2.0,Xpath,Xml Namespaces,Xpath 2.0,我不熟悉使用XPath,我试图通过其属性检索节点,但问题是该属性不区分大小写,这意味着我不知道字符串在文档中是如何大小写的 例如: 鉴于该文件: <Document xmlns:my="http://www.MyDomain.com/MySchemaInstance"> <Machines> <Machine FQDN="machine1.mydomain.com"> <...> </Machine>

我不熟悉使用XPath,我试图通过其属性检索节点,但问题是该属性不区分大小写,这意味着我不知道字符串在文档中是如何大小写的

例如:

鉴于该文件:

<Document xmlns:my="http://www.MyDomain.com/MySchemaInstance">
  <Machines>
    <Machine FQDN="machine1.mydomain.com">
      <...>
    </Machine>
    <Machine FQDN="Machine2.MyDomain.Com">
      <...>
    </Machine>
  </Machines>
</Document>
但是获取machine2的类似XPath将失败,因为案例不匹配:

//my:Machines/my:Machine/*[@FQDN='machine2.mydomain.com']  //Fails

我看到很多帖子都提到使用类似的名称空间(我不知道如何将名称空间应用于此):

但是,即使我让它工作,考虑到我使用它的次数,它也会非常麻烦


最后,我读到XPath 2.0支持matches()和lower-case(),但作为XPath新手,我不知道如何应用它们:

例如,如果我尝试以下操作,我会得到一个“无效的限定名”: //my:Machines/my:Machine/[匹配(@FQDN,“(?i)machine1.mydomain.com')] //my:Machines/my:Machine/[小写(@FQDN,'machine1.mydomain.com')]


有人能提供一个包含名称空间处理的XPath示例吗


谢谢您的示例XML和XPath语句不匹配

  • 示例XML元素未绑定到命名空间。声明了“我的”名称空间前缀,但没有用于这些元素,因此它们位于“无名称空间”中
  • 示例XPath在
    Machine
    的子元素上使用谓词过滤器,而不是在具有
    @FQDN
    Machine
    元素上使用谓词过滤器
您可以使用以下任一方法查找不区分大小写的值:

  • 函数,带有不区分大小写匹配的标志:

    //Machines/Machine[matches(@FQDN,'machine2.mydomain.com','i')]
    
  • 用于计算大写字符串的函数:

    //Machines/Machine[upper-case(@FQDN)=upper-case('machine2.mydomain.com')]
    
    //Machines/Machine[lower-case(@FQDN)=lower-case('machine2.mydomain.com')]
    
  • 用于计算小写字符串的函数:

    //Machines/Machine[upper-case(@FQDN)=upper-case('machine2.mydomain.com')]
    
    //Machines/Machine[lower-case(@FQDN)=lower-case('machine2.mydomain.com')]
    
是否有人可以提供一个包含 可以工作的名称空间

不确定名称空间的处理是什么意思,但如果希望在这些元素上进行匹配,而不考虑其名称空间,则可以对名称空间使用通配符运算符:

//*:Machines/*:Machine[matches(@FQDN,'machine2.mydomain.com','i')]