如何删除XML标签中的属性前缀?

时间:2018-10-01 13:13:24

标签: java xml xslt

我需要在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

1 个答案:

答案 0 :(得分:0)

type的内容被删除,因为<xsl:apply-templates select="node()|@*" />选择了当前属性的子节点(和属性),但是属性没有像元素一样具有子节点(或属性)。

相反,只需执行此操作...

<xsl:value-of select="." />