如何使用XSLT根据子节点属性与元素值过滤删除指定XML节点
正确XSLT匹配规则说明
原规则失效核心原因:
- 未匹配实际层级结构:你给出的
NameValue节点直接父节点是Property,原规则用通配符*匹配存在层级匹配模糊的问题 - 节点值比对逻辑不严谨:未显式指定取节点文本值,部分XSLT处理器会直接比对节点对象而非节点内容,容易出现匹配失效
场景1:匹配包含符合要求NameValue的Property节点
match="Property[NameValue[@name='PrmEAMLocation' and text()='true']]"
如果需要同时校验type属性,可扩展为:
match="Property[NameValue[@name='PrmEAMLocation' and @type='StringType' and text()='true']]"
场景2:匹配包含符合要求NameValue的ItemLocation节点
如果Property是ItemLocation的直接子节点,规则如下:
match="ItemLocation[Property/NameValue[@name='PrmEAMLocation' and text()='true']]"
如果不确定Property和ItemLocation之间的嵌套层级,可以用后代选择器:
match="ItemLocation[.//NameValue[@name='PrmEAMLocation' and text()='true']]"
场景3:直接匹配符合要求的NameValue节点本身
match="NameValue[@name='PrmEAMLocation' and @type='StringType' and text()='true']"
内容的提问来源于stack exchange,提问作者Ferhache0
相关产品推荐
相关产品推荐

