Xml 如何从输出中删除某些名称空间

Xml 如何从输出中删除某些名称空间,xml,xpath,xslt-2.0,Xml,Xpath,Xslt 2.0,我有更多的名称空间和XML。在输出XML中,我需要它们中的一些,也需要它们中的一些 XML输入: <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.

我有更多的名称空间和XML。在输出XML中,我需要它们中的一些,也需要它们中的一些

XML输入:

    <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>

孩子1
孩子2
孩子3
孩子4
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>

孩子1
孩子2
孩子3
孩子4
我所需的输出:

只需删除这两个名称空间即可

您可以尝试以下操作:

 <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>


使用此功能后,它将删除所有名称空间,并附带“ali”一个名称空间。我的要求是删除'ali',只有其他人应该来。在xsl:namespace中添加所有需要的名称空间,然后删除alit谢谢@鲁佩什!!这是很好的工作,但在这里,我们只删除一个名称空间,我们停止所有名称空间,并再次应用除一个以外的所有名称空间。如果有逻辑只删除一个!!!但不管怎样,现在我解决了我的问题,再次感谢!:)要复制除一个以外的所有名称空间,您可以编写
先生,@MichaelKay感谢您的回复。但这里有一些问题:1。选择属性在3.0中是否允许?2.在更改版本后,它将不执行其流程。如果可能的话,你能给我一个示例代码吗?