如何使用XSLT移除指定XML元素的xsi:type属性
解决XSLT仅移除指定元素xsi:type属性的问题
问题原因
你之前的尝试失败,核心原因是没有在XSLT中声明xsi命名空间。xsi:type是属于http://www.w3.org/2001/XMLSchema-instance命名空间的属性,XSLT必须明确识别这个命名空间,才能正确匹配到该属性。
解决方案
在XSLT的xsl:stylesheet根元素中添加xsi命名空间声明,然后保留原有的匹配规则即可。
完整XSLT代码示例
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <!-- 仅匹配Root/Foo/Bar元素的xsi:type属性,不输出该属性 --> <xsl:template match="Root/Foo/Bar/@xsi:type" /> <!-- 身份模板:复制所有其他节点和属性 --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
效果验证
将上述XSLT应用到你的XML文件后,输出结果会保留其他元素的xsi:type属性,仅移除<Root/Foo/Bar>的该属性:
<Root> <ChildElement xsi:type="XXX" /> <Foo> <Bar /> </Foo> <AndAnotherOne xsi:type="ZZZ" /> </Root>
内容的提问来源于stack exchange,提问作者Javier
相关产品推荐
相关产品推荐

