0

我需要根据给定的 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>

如果这是不可能的方式,请提出替代方案来实现这一目标

4

0 回答 0