如何使用XSLT移除XML中的指定元素标签
移除XML中特定嵌套元素块的XSLT解决方案
要移除你XML里<InitgPty>下的整个<Id>嵌套块(包含<OrgId>、<Othr>等子元素),我们可以利用XSLT的身份模板配合针对性的匹配模板来实现,重点要处理原XML的默认命名空间,否则会出现元素匹配失败的问题。
完整XSLT代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03"> <!-- 身份模板:默认复制所有节点和属性 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <!-- 匹配要移除的<InitgPty>下的<Id>元素,不输出任何内容 --> <xsl:template match="ns:InitgPty/ns:Id"/> </xsl:stylesheet>
代码说明
- 命名空间绑定:原XML使用了默认命名空间
urn:iso:std:iso:20022:tech:xsd:pain.001.001.03,我们在XSLT里将其绑定到前缀ns,这样才能正确匹配到目标元素。 - 身份模板:这个模板是XSLT的基础,负责原样复制XML中所有未被特殊模板匹配的节点和属性,确保其他内容不受影响。
- 移除模板:专门匹配
<InitgPty>下的<Id>元素(通过ns:前缀指定命名空间),该模板没有任何输出逻辑,所以匹配到的<Id>及其所有子元素都会被移除。
转换后效果
原XML中的<InitgPty>部分会变成:
<InitgPty> <Nm>TestName</Nm> </InitgPty>
其余所有内容都会完整保留,只有你指定的<Id>嵌套块被移除。
内容的提问来源于stack exchange,提问作者Tricky9132
相关产品推荐
相关产品推荐

