如何根据子节点值移除XML中的指定节点(VW车型示例)
解决方案
你的XSLT代码问题在于仅匹配根节点后直接复制根元素,没有对car节点做针对性过滤。要实现移除指定节点,最常用的方式是身份模板+匹配排除:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <!-- 身份模板:默认复制所有节点和属性 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 匹配并排除manufacturer为'VW'的car节点 --> <xsl:template match="car[manufacturer = 'VW']"/> </xsl:stylesheet>
工作原理
- 身份模板会递归复制XML中的所有节点、属性和文本,保证原有结构不变。
- 第二个模板专门匹配满足
manufacturer = 'VW'的car节点,模板体为空,意味着这些节点不会被复制到输出结果中,从而实现移除效果。
测试验证
将上述XSLT应用到你的原XML,会直接输出你期望的结果:
<?xml version="1.0" encoding="UTF-8"?> <root> <cars> <car> <manufacturer>Audi</manufacturer> </car> <car> <manufacturer>Lada</manufacturer> </car> </cars> </root>
内容的提问来源于stack exchange,提问作者jcl
相关产品推荐
相关产品推荐

