我需要在xml中删除一个标签的属性。为此,我找到了使用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>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:apply-templates select="node()|@*" />
</xsl:attribute>
</xsl:template>
它工作得很好,甚至太多,因为在删除过程之后,必要的属性变得没有前缀,也没有内容。由于某种原因,前缀和内容都被截断,仅保留一个空属性,例如,应删除前缀的attr“ xsi:type”:
<out:Declarant xsi:type="out:RequestAccount">
预期是这样:
<out:Declarant type="out:RequestAccount">
但是得到了:
<out:Declarant type="">
我不明白为什么删除“类型”的内容?
这是我的xsd文件到xmls的位置: xsd image
答案 0 :(得分:0)
type
的内容被删除,因为<xsl:apply-templates select="node()|@*" />
选择了当前属性的子节点(和属性),但是属性没有像元素一样具有子节点(或属性)。
相反,只需执行此操作...
<xsl:value-of select="." />