如何使用XSLT移除XML<desc>节点内特定class的span标签
实现思路
- 采用XSLT标准的身份模板模式,先完整保留XML原有全部节点、属性和文本结构,再通过精准路径匹配跳过需要移除的目标span节点,不会误删其他无关内容。
- 匹配规则严格限定范围:只针对
<desc>节点内部、class属性值为st的<span>标签做移除处理,其余同名称标签、同属性但不属于desc范围的元素都会原样保留。
可直接使用的XSLT代码
<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> <!-- 精准移除desc节点下class为st的span标签 --> <xsl:template match="desc/span[@class = 'st']"/> </xsl:stylesheet>
适配调整说明
- 上述代码默认处理
<desc>直接子级的目标span,和你提供的示例场景完全匹配,转换后输出结果和预期效果完全一致。 - 如果存在
<desc>标签内部嵌套多层、目标span不在直接子级的情况,只需将匹配规则的路径修改为//desc//span[@class = 'st'],就能覆盖desc下所有嵌套层级的同类型span元素。 - 规则写死了class值等于
st,不会匹配其他class属性的span标签,不会造成内容误删。
内容的提问来源于stack exchange,提问作者Brajesh Narayan
相关产品推荐
相关产品推荐

