[英]case insensitive search - 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)");
希望有人在这里可以指出我错在哪里。
谢谢,Simak
首先,您可能不需要所有这些//
步骤//
允许在任一侧命名的节点之间的任意数量级别的元素 - 使用单个/
步骤枚举来自根的完整路径,或者只是使用一个//
搜索整棵树。
其次,你需要将你正在比较的Header
值缩减,而不是你要比较的固定字符串。 尝试更像的东西
count(//Sect[
Header[
contains(
translate(
.,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz'),
'primary objectives'
)
]
]//Obj)
这将为您提供在Sect
内任何位置发生的Obj
元素的计数,该Sect
包含任何包含“主要目标”的Header
子项(不区分大小写)。 这与稍有不同
count(//Sect[contains(translate(Header, ....
在Sect
包含多个Header
的情况下 - 后者只检查每个Sect
的第一个 Header
,而不是在其中任何一个中查找匹配。
你需要折叠两个字符串:
contains(translate(Header, '...', '...'), 'primary objectives')
请注意,您可以使用
# Letters of "primary objectives"
'ABCEIJMOPRSTVY', 'abceijmoprstvy'
而不是更大但仍然有限的集合
# Some of the latin letters
'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'
您要做的是检查H4的内容是否包含转换为小写的“排除标记”。
count = $ dom-> findvalue(“count(// TaggedPDF-doc // Part // Sect // Sect // Sect [contains(H4,translate(\\”Exclusion criteria \\“,'ABCDEFGHJIKLMNOPQRSTUVWXYZ','abcdefghjiklmnopqrstuvwxyz')) )
] // OBJ)“);
这与做的一样:
count = $dom->findvalue("count(//TaggedPDF-doc//Part//Sect//Sect//Sect[contains(
H4, \"exclusion criteria\"
)
]//OBJ)");
你想要的是将H4的内容翻译成小写,并将它与你搜索的小写版本进行比较; 在这种情况下\\"exclusion criteria\\"
:
count = $dom->findvalue("count(//TaggedPDF-doc//Part//Sect//Sect//Sect[contains(
translate(H4,
'ABCDEFGHJIKLMNOPQRSTUVWXYZ',
'abcdefghjiklmnopqrstuvwxyz'),
\"exclusion criteria\"
)
]//OBJ)");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.