微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xml – 不区分大小写的搜索 – xpath

我正在尝试使用下面的XPath表达式对我的 XML文档进行不区分大小写的搜索.显然,我错了,因为结果不同.希望有人在这里可以指出我的错误

我试图计算< Sect>下的所有Obj元素.其中< Header>价值是主要目标.为了获得计数,我使用下面的表达式,它很有用.

表达式 – 不区分大小写:返回31个节点.

("count(//TaggedPDF-doc//Part//Sect//Sect//Sect[contains(Header,\"Primary objectives\")]//OBJ)");

但我想让“主要目标”不区分大小写.所以,我试图使用Translate.
表达式 – 添加翻译以使“主要目标”不区分大小写.

返回0个节点.

$count = $dom->findvalue("count(//TaggedPDF-doc//Part//Sect//Sect//Sect[contains(H4,translate(\"Primary Objectives\",'ABCDEFGHJIKLMnopQRSTUVWXYZ','abcdefghjiklmnopqrstuvwxyz')
         )
]//OBJ)");

希望有人在这里可以指出我错在哪里.

提前致谢,
西马克

解决方法

首先,您可能不需要所有这些//步骤//允许在任一侧命名的节点之间的任意数量级别的元素 – 使用单个/步骤枚举来自根的完整路径,或者只是使用一个//搜索整棵树.

其次,你需要将你正在比较的Header值缩减,而不是你要比较的固定字符串.尝试更像的东西

count(//Sect[
          Header[
            contains(
              translate(
                .,'ABCDEFGHIJKLMnopQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),'primary objectives'
            )
          ]
        ]//Obj)

这将为您提供在Sect内任何位置发生的Obj元素的计数,该Sect包含任何包含“主要目标”的Header子项(不区分大小写).这与稍有不同

count(//Sect[contains(translate(Header,....

在Sect包含多个Header的情况下 – 后者只检查每个Sect中的第一个Header,而不是在其中任何一个中查找匹配.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。