我正在尝试使用下面的XPath表达式对我的XML文档进行不区分大小写的搜索。显然,我错了,因为结果不同。希望有人在这里指出我的错误?
我正在尝试计算<Sect>
<Header>
值为主要目标的所有Obj元素。为了获得计数,我使用下面的表达方式,这非常有用。
表达式 - 不区分大小写:返回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)");
希望有人在这里可以指出我错在哪里。
提前致谢, 西马克
答案 0 :(得分:4)
首先,您可能不需要所有这些//
步骤,因为//
允许在任一侧命名的节点之间的任意数量级别的元素 - 枚举来自root使用单个/
步骤,或者只使用一个//
来搜索整个树。
其次,您需要对要比较的Header
值进行保留,而不是您要比较的固定字符串。尝试更像
count(//Sect[
Header[
contains(
translate(
.,
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'abcdefghijklmnopqrstuvwxyz'),
'primary objectives'
)
]
]//Obj)
这将为您提供Obj
元素的计数,这些元素出现在Sect
内,其中任何Header
子项包含“主要目标”(不区分大小写)。这与
count(//Sect[contains(translate(Header, ....
在Sect
包含多个Header
的情况下 - 后者只检查每个Header
中的第一个 Sect
而不是寻找任何一场比赛。
答案 1 :(得分:2)
如果您可以访问Xath中包含的XPath 2.0(或更高版本)实现,则可以使用
count(
//TaggedPDF-doc//Part//Sect//Sect//Sect[
contains(lower-case(H4), 'exclusion criteria')
]//OBJ
)
eXist DB,BaseX,Saxon和lots of others存在XPath 2.0处理器的Perl接口(实际上是支持XQuery的XML数据库)。
答案 2 :(得分:1)
您需要折叠两个字符串:
contains(translate(Header, '...', '...'), 'primary objectives')
请注意,您可以使用
# Letters of "primary objectives"
'ABCEIJMOPRSTVY', 'abceijmoprstvy'
而不是更大但仍然有限的集合
# Some of the latin letters
'ABCDEFGHJIKLMNOPQRSTUVWXYZ', 'abcdefghjiklmnopqrstuvwxyz'
答案 3 :(得分:0)
您要做的是检查H4的内容是否包含“Exclusion criters”转换为小写。
count = $ dom-&GT; findvalue(“计数(// TaggedPDF-doc的// //部分派// //派宗[含有(H4, 翻译(\“排除标准\”, '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)");