如何使用XSLT实现Presentation MathML到Content MathML转换器?

时间:2017-10-07 17:08:03

标签: xml xslt mathml

我想使用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>

1 个答案:

答案 0 :(得分:0)

  

所有其他元素<xxx>转到<apply><csymbol>xxx</csymbol> ... </apply>

那只是

<xsl:template match="*">
  <apply>
   <csymbol>
     <xsl:value-of select="name()"/>
   </csymbol>
 </apply>
</xsl:template>