我想使用XSLT实现P2C转换器。 E.g:
<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>
以下是我到目前为止所写的内容,但由于我对XSLT没有太多经验,因此我很难实现规则3。任何人都可以帮忙吗?
<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>
答案 0 :(得分:0)
所有其他元素
<xxx>
转到<apply><csymbol>xxx</csymbol> ... </apply>
那只是
<xsl:template match="*">
<apply>
<csymbol>
<xsl:value-of select="name()"/>
</csymbol>
</apply>
</xsl:template>