我需要根据给定的 Input 参数应用模板。
输入 XML:
<?xml version="1.0"?>
<chapter xmlns="http://www.w3.org/1998/Math/MathML">
<section1>
<math><mtext>This is section1 mtext</mtext></math>
</section1>
<section2>
<math><mtext>This is section2 mtext</mtext></math>
</section2>
</chapter>
如果用户将 Xpath 表达式作为输入参数,则应选择该特定 Xpath 并应用模板。
例如,如果用户给出“/chapter/section1/”作为输入参数,那么所需的输出是
<?xml version="1.0" encoding="UTF-8"?><chapter>
<section1>
<math>~rom1~This is section1 mtext</math>
</section1>
<section2>
<math>~rom~this is section2 mtext</math>
</section2>
</chapter>
如果用户给出“/chapter/section1/”和“/chapter/section2”作为两个输入参数,那么输出应该是
<?xml version="1.0" encoding="UTF-8"?><chapter>
<section1>
<math>~rom1~This is section1 mtext</math>
</section1>
<section2>
<math>~rom2~this is section2 mtext</math>
</section2>
</chapter>
如果用户没有给出任何参数,那么输出应该是
<?xml version="1.0" encoding="UTF-8"?><chapter>
<section1>
<math>~rom~This is section1 mtext</math>
</section1>
<section2>
<math>~rom~this is section2 mtext</math>
</section2>
</chapter>
我尝试了以下 XSLT
<?xml version='1.0'?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:m="http://www.w3.org/1998/Math/MathML">
<xsl:param name="Xpath1"/>
<xsl:param name="Xpath2"/>
<xsl:template match="@*|node()"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
<xsl:template match="Xpath1//mtext"><xsl:text>~rom1~</xsl:text><xsl:apply-templates/></xsl:template>
<xsl:template match="Xpath2//mtext"><xsl:text>~rom2~</xsl:text><xsl:apply-templates/></xsl:template>
<xsl:template match="m:mtext"><xsl:text>~rom~</xsl:text><xsl:apply-templates/></xsl:template>
</xsl:stylesheet>
如果这是不可能的方式,请提出替代方案来实现这一目标