如何从输出中删除一些命名空间

时间:2017-03-31 10:31:35

标签: xml xpath xslt-2.0

我有XML和更多名称空间。在输出XML中我需要其中一些和一些必需的。

XML INPUT:

    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ali="http://www.niso.org/schemas/ali/1.0"
    xmlns:mml="http://www.w3.org/1998/Math/MathML"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <child1>child1</child1>
    <child2>child2</child2>
    <child3>child3</child3>
    <child4>child4</child4>
</root>

XSLT:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ali="http://www.niso.org/schemas/ali/1.0"
    xmlns:mml="http://www.w3.org/1998/Math/MathML"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    extension-element-prefixes="ali"
    exclude-result-prefixes="xs ali xsi mml xlink"
    version="2.0">

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>

</xsl:stylesheet>

我的输出:

    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ali="http://www.niso.org/schemas/ali/1.0" xmlns:mml="http://www.w3.org/1998/Math/MathML"
    xmlns:xlink="http://www.w3.org/1999/xlink">
    <child1>child1</child1>
    <child2>child2</child2>
    <child3>child3</child3>
    <child4>child4</child4>
</root>

我需要的输出:

需要删除这两个名称空间ali

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

 <xsl:template match="@* | node()">
        <xsl:copy copy-namespaces="no">
            <xsl:copy-of select="namespace::* except namespace::ali"/>
            <xsl:apply-templates select="@* | node()"/>
        </xsl:copy>
    </xsl:template>