首页 > 解决方案 > 如何删除 XML 标记中的属性前缀?

问题描述

我需要删除 xml one 标签的属性。为此,我找到了使用 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 图像

标签: javaxmlxslt

解决方案


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

相反,只需这样做......

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

推荐阅读