简化特定XPath表达式
我想知道是否可以简化以下XPath表达式:简化特定XPath表达式,xpath,Xpath,我想知道是否可以简化以下XPath表达式: //map[requester/@type='2' and requester/code] 一些测试数据: <root> <map> <requester type="2"> <code>a</code> <code>b</code> </requester>
//map[requester/@type='2' and requester/code]
一些测试数据:
<root>
<map>
<requester type="2">
<code>a</code>
<code>b</code>
</requester>
</map>
...
</root>
我的目标是只获取至少有一个请求者具有type属性和值“2”的映射元素,并且至少有一个code元素。对于您的用例,这可能是最简单的。但是,它与您描述的操作不匹配 在这里,您可以选择地图元素,其中
<root>
<map>
<requester type="2"/>
<requester>
<code>a</code>
</requester>
</map>
</root>
如果希望(1)和(2)中的元素相同,应该使用(根据kjhughes的建议稍微简化)
在这里,我们选择所有具有请求者元素的映射元素,请求者元素又具有值为2的属性类型和代码元素。如果看不到运行它所针对的数据,这实际上是不可能回答的。我已经添加了测试数据。极大的改进!非常感谢。很好的解释(+1)。这里有一个可以从长度上去掉几个字符的变体:
//map[requester[@type='2']/code]
假设我也需要非空白的“code”,那么像:://map[requester[@type='2']/code[normalize-space()]这样的解决方案会很好吗?@kjhough你是对的,这会好一点。我本该想到这种改进的。我已将其编辑为答案。@efstathioschatzikyrakidis是的,该修改将只提供包含类型属性为2的请求者元素的映射元素,而该属性又至少包含一个不完全由空格组成的代码元素。
//map[requester[@type='2']/code]