Xpath 使用XSLT根据同级节点条件选择节点
假设我有如下XML:Xpath 使用XSLT根据同级节点条件选择节点,xpath,Xpath,假设我有如下XML: <child_metadata> <metadata> <attributes> <metadata_key value="include"/> <metadata_value value="value1"/> </attributes> </metadata> <m
<child_metadata>
<metadata>
<attributes>
<metadata_key value="include"/>
<metadata_value value="value1"/>
</attributes>
</metadata>
<metadata>
<attributes>
<metadata_key value="dont_include"/>
<metadata_value value="value2"/>
</attributes>
</metadata>
<metadata>
<attributes>
<metadata_key value="include"/>
<metadata_value value="value3"/>
</attributes>
</metadata>
</child_metadata>
使用XSLT(没有任何扩展),我只想选择元数据_键为“include”的那些值。因此,对于这个例子,我想选择value1和value3
如何做到这一点?要使用的XPath表达式(对于模板或在for each循环中)是:
//metadata_value[../metadata_key/@value='include']/@value
因为不清楚“选择”是什么意思,所以我无法发布完整的XSLT示例。XSLT用于转换,而不是查询(“选择”数据);查询是使用XPath表达式完成的,比如我上面提供的表达式。对于
元数据\u值
节点集,请使用
//metadata/attributes[metadata_key/@value='include']/metadata_value
添加@value
以获取值本身。我想您需要
//atributes[metadata_key/@value='include']/metadata_vale/@value
或(如卢塞罗邮报)
但是,根据您要执行的操作,您应该使用键,因为这里有一个交叉引用(metadata\u key/@value
用作metadata\u value/@value
)的键)。避免子代轴也很好。使用:
/child_metadata/metadata/attributes[metadata_key/@value='include']/metadata_value/@value
使用/
缩写通常效率低下,因为这会导致遍历整个(子)树
/child_metadata/metadata/attributes[metadata_key/@value='include']/metadata_value/@value