XPath 2.0:按属性检索值不区分大小写的节点
我不熟悉使用XPath,我试图通过其属性检索节点,但问题是该属性不区分大小写,这意味着我不知道字符串在文档中是如何大小写的 例如: 鉴于该文件: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>
<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')]