【发布时间】:2017-10-07 17:08:02
【问题描述】:
我想使用 XSLT 实现 P2C 转换器。例如:
<mrow>
<mi>x</mi>
<mo>+</mo>
<msup>
<mi>y</mi>
<mn>3</mn>
</msup>
</mrow>
进入 C-MathML 术语。
<apply>
<csymbol>mrow</csymbol>
<ci>x</ci>
<csymbol>+</csymbol>
<apply>
<csymbol>msup</csymbol>
<ci>y</ci>
<cn>3</cn>
</apply>
</apply>
规则如下:
1) <mi> 转到 <ci>
2) <mo> 转到 <csymbol>
3) 所有其他元素 <xxx> 转到 <apply><csymbol>xxx</csymbol> ... </apply>
以下是我到目前为止所写的内容,但我在实施第 3 条规则时遇到了困难,因为我对 XSLT 没有太多经验。有人可以帮忙吗?
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mml="http://www.w3.org/1998/Math/MathML" >
<xsl:output method="xml" />
<xsl:template mode="p2c" match="*">
<xsl:copy>
<xsl:copy-of select="@" />
<xsl:apply-templates mode="p2c"/>
</xsl:copy>
</xsl:template>
<!-- mn -->
<xsl:template mode="p2c" match="mml:mn">
<mml:cn><xsl:apply-templates mode="p2c"/></mml:cn>
</xsl:template>
<!-- mo -->
<xsl:template mode="p2c" match="mml:mo">
<mml:csymbol><xsl:apply-templates mode="p2c"/></mml:csymbol>
</xsl:template>
<!-- mi -->
<xsl:template mode="p2c" match="mml:mi/text()">
<mml:ci><xsl:value-of select="."/></mml:ci>
</xsl:template>
</xsl:stylesheet>
【问题讨论】: