XSLT: скопировать все дочерние элементы <mathml>без пространства имен m: без необходимости создания шаблона для каждого элемента - PullRequest
0 голосов
/ 16 мая 2018

Это мой ввод:

                         <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: без необходимости создания шаблона для каждого элемента . Можете ли вы предложить какое-либо решение для этого?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Попробуйте набрать:

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

0 голосов
/ 16 мая 2018

Вы можете использовать следующий фрагмент, чтобы скопировать то, что внутри math

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

Чтобы удалить пространства имен, вы должны создать свой элемент, используя xsl:element, посмотрите этот ответ , который поможет вам в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...