Xml XPath多值搜索
我有一个类似于:Xml XPath多值搜索,xml,search,xpath,Xml,Search,Xpath,我有一个类似于: <user id="1"> <first_name>Max</first_name> <last_name>Mustermann</last_name> </user> 马克斯 马斯特曼 在搜索“Max Mustermann”时,如何创建XPath以获取用户id 谢谢诸如此类的东西 //user[first_name='Max' and last_name='Mustermann']/@id
<user id="1">
<first_name>Max</first_name>
<last_name>Mustermann</last_name>
</user>
马克斯
马斯特曼
在搜索“Max Mustermann”时,如何创建XPath以获取用户id
谢谢诸如此类的东西
//user[first_name='Max' and last_name='Mustermann']/@id
如果该示例XML是准确的,包括缩进(即,在结束
标记和开始
标记之间有一个纯空白文本节点),那么您可以简单地使用normalize-space()
:
这是因为XPath中元素节点的字符串值根据定义是其所有子代文本节点的串联,对该值应用normalize space
,将去掉前导和尾随空格,并将任何内部运行的空格字符压缩为单个空格
如果XML不包含这些空白文本节点,则user
元素的normalize-space()
值将是MaxMustermann
,因此您必须手动构造值进行比较:
//user[normalize-space(concat(first_name, ' ', last_name)) = 'Max Mustermann']/@id
我删除了我的答案,打开了另一个选项卡来测试我的表达式,此时您发布了:)我怀疑OP在开始时需要一个
/
,而不仅仅是一个/
——如果OP的输入是完整的XML文档,那么这个表达式是正确的,但是不需要“搜索”如果输入只包含一个用户
…这是一个公平的评论@Ian。。。更新-谢谢。我很喜欢你的解决方案——非常聪明,这是我从未考虑过的
//user[normalize-space(concat(first_name, ' ', last_name)) = 'Max Mustermann']/@id