gpt4 book ai didi

XPath 2.0 : Retrieving nodes by attribute where value is case Insensitive

转载 作者:行者123 更新时间:2023-12-03 15:52:23 28 4
gpt4 key购买 nike

我是 XPath 的新手,我正在尝试通过其属性检索节点,但问题是该属性不区分大小写,这意味着我不知道字符串在文档中的大小写方式。

例如:

给定文档:

<Document xmlns:my="http://www.MyDomain.com/MySchemaInstance">
<Machines>
<Machine FQDN="machine1.mydomain.com">
<...>
</Machine>
<Machine FQDN="Machine2.MyDomain.Com">
<...>
</Machine>
</Machines>
</Document>

如果我想检索 machine1,我会使用 XPath:

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

但是获取 machine2 的类似 XPath 会失败,因为大小写不匹配:

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

我看到很多帖子都提到使用类似的东西(我不确定如何将命名空间应用于此):

translate(@FQDN, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz')

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


最后我读到 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 元素未绑定(bind)到命名空间。 “我的” namespace 前缀已声明,但未用于这些元素,因此它们位于“无 namespace ”中。
  • 您的示例 XPath 在 Machine 的子元素上使用谓词过滤器,而不是在具有 @FQDNMachine 元素上使用谓词过滤器。<

您可以使用以下任一方法来查找不区分大小写的值:

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

    //Machines/Machine[matches(@FQDN,'machine2.mydomain.com','i')]
  • upper-case()评估大写字符串的函数:

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

    //Machines/Machine[lower-case(@FQDN)=lower-case('machine2.mydomain.com')]

Can someone provide a sample XPath that includes handling of Namespaces that would work?

不确定命名空间的处理是什么意思,但是如果您想匹配这些元素而不考虑它们的命名空间,那么您可以对命名空间使用通配符:

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

关于XPath 2.0 : Retrieving nodes by attribute where value is case Insensitive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424367/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com