XSLT:复制<mathml>的所有子节点而不使用m:namespace,而不必为每个元素创建模板

时间:2018-05-16 05:07:20

标签: xslt xml-namespaces prefix

这是我的意见:

                         <mathml>
                            <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
                                <m:mrow>
                                    <m:mtext>SL depreciation expense</m:mtext>
                                    <m:mo>=</m:mo>
                                    <m:mfrac>
                                        <m:mrow>
                                            <m:mtext>cost−residual value</m:mtext>
                                        </m:mrow>
                                        <m:mrow>
                                            <m:mtext>useful life</m:mtext>
                                        </m:mrow>
                                    </m:mfrac>
                                </m:mrow>
                            </m:math>
                        </mathml>

这是预期的输出

            <math xmlns="http://www.w3.org/1998/Math/MathML">
            <mrow>
                <mtext>SL depreciation expense</mtext>
                <mo>=</mo>
                <mfrac>
                    <mrow>
                        <mtext>cost−residual value</mtext>
                    </mrow>
                    <mrow>
                        <mtext>useful life</mtext>
                    </mrow>
                </mfrac>
            </mrow>
        </math>

我想复制mathml节点的所有子节点而不使用m:prefix命名空间,而不必为每个元素创建模板。 你能为此提出任何解决方案吗?

2 个答案:

答案 0 :(得分:0)

您可以使用以下代码段复制math

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

要删除名称空间,您应该使用xsl:element创建元素,并查看this answer,以帮助您执行此操作。

答案 1 :(得分:0)

尝试:

<xsl:template match="m:*">
    <xsl:element name="{local-name()}" namespace="http://www.w3.org/1998/Math/MathML">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

请参阅http://xsltfiddle.liberty-development.net/6qVRKvZ