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,而不是在其中任何一个中查找匹配.

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念