无法为此输入和输出生成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。
答案 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>