需要XSLT来跟随输入输出

时间:2018-06-16 09:20:44

标签: xml xslt xsd

无法为此输入和输出生成XSLT - 需要您的帮助。

输入:

 <ns1:MESSAGE xmlns:ns1="http://xmlns.abc.com/abc/abc_message">
    <ns1:NAME>qwerty</ns1:NAME>
    <ns1:NUMBER>1234</ns1:NUMBER>
    <ns1:TEXT>
        <ns1:DESCRIPTION>
            <ns1:Line>
                <ns1:Number>100</ns1:Number>
            </ns1:Line>
        </ns1:DESCRIPTION>
    </ns1:TEXT>
</ns1:MESSAGE>

输出:

<MESSAGE xmlns="http://xmlns.abc.com/abc/abc_message">
    <NAME xmlns="">qwerty</NAME>
    <NUMBER xmlns="">1234</NUMBER>
    <TEXT xmlns="">
        <DESCRIPTION>
            <Line>
                <Number>1001</Number>
            </Line>
        </DESCRIPTION>
    </TEXT>
</MESSAGE>

我试过这个:

 <xsl:template match="/" xml:id="id_19">
          <xsl:apply-templates select="/" mode="copy-no-namespaces" xml:id="id_20"/>
       </xsl:template>
       <xsl:template match="*" mode="copy-no-namespaces" xml:id="id_21">
          <xsl:element name="{local-name()}" xml:id="id_22">
             <xsl:copy-of select="@*" xml:id="id_23"/>
             <xsl:apply-templates select="node()" mode="copy-no-namespaces" xml:id="id_24"/>
          </xsl:element
       </xsl:template>

但它不起作用 - 请帮助我构建必要的xslt。

1 个答案:

答案 0 :(得分:0)

你的解决方案很接近。只需为ns1:MESSAGE添加一个特殊模板,然后从第一个模板中删除mode="copy-no-namespaces",因为它阻止了新MESSAGE元素上的命名空间。

<xsl:transform version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns1="http://xmlns.abc.com/abc/abc_message">

    <xsl:template match="*" mode="copy-no-namespaces" xml:id="id_21">
          <xsl:element name="{local-name()}" xml:id="id_22">
             <xsl:copy-of select="@*" xml:id="id_23"/>
             <xsl:apply-templates select="node()" mode="copy-no-namespaces" xml:id="id_24"/>
          </xsl:element>
    </xsl:template>

    <xsl:template match="ns1:MESSAGE">
          <xsl:element name="MESSAGE" namespace="http://xmlns.abc.com/abc/abc_message" xml:id="id_22">
             <xsl:copy-of select="@*" xml:id="id_23"/>
             <xsl:apply-templates select="node()" mode="copy-no-namespaces" xml:id="id_24"/>
          </xsl:element>
    </xsl:template>

</xsl:transform>