<mo>
その中の文字に基づいて XML 要素を変換する必要があります。たとえば、要素に大文字のみが含まれている場合、「obar」として変換する必要があります。ただし、小文字のみが含まれている場合は、「orule」として変換する必要があります。要素に大文字と小文字の両方が含まれている場合は、「obar」として変換する必要があります。また、要素に XSLT コードで指定されたアセンダー文字が含まれている場合は、「obar」のようにする必要があります。
使用し<xsl:if>
た状態です。<xsl:if>
条件を 1 回だけ使用する必要がある
XSLT 1.0 のみで変換する必要があります。
サンプル XML コード:
<?xml version="1.0"?><chapter xmlns="http://www.w3.org/1998/Math/MathML">
<p>
<math display="block">
<mrow>
<mover accent='true'>
<mrow>
<mi>R</mi>
<mi>T</mi>
</mrow>
<mo stretchy='true'>¯</mo>
</mover>
<mover accent='true'>
<mrow>
<mi>a</mi>
<mi>A</mi>
</mrow>
<mo stretchy='true'>¯</mo>
</mover>
<mover accent='true'>
<mrow>
<mi>a</mi>
<mi>a</mi>
</mrow>
<mo stretchy='true'>¯</mo>
</mover>
<mover accent='true'>
<mrow>
<mi>a</mi>
<mi>h</mi>
</mrow>
<mo stretchy='true'>¯</mo>
</mover>
</mrow>
</math>
</p>
</chapter>
XSLT 1.0 が試した:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1998/Math/MathML" xmlns:m="http://www.w3.org/1998/Math/MathML" >
<xsl:output method="xml" encoding="UTF-8" indent="no"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="m:mover[@accent='true']">
<xsl:choose>
<xsl:when test="(self::*/child::*[2]/self::m:mo[@stretchy='true']/text())='¯'">
<xsl:if test="(self::*/child::*[1]/self::m:mrow/child::*/text())='b' or 'd' or 'f' or 'h' or 'i' or 'j' or 'k' or 'l' or 'r' or 't' or 'A' or 'B' or 'C' or 'D' or 'E' or 'F' or 'G' or 'H' or 'I' or 'J' or 'K' or 'L' or 'M' or 'N' or 'O' or 'P' or 'Q' or 'R' or 'S' or 'T' or 'U' or 'V' or 'W' or 'X' or 'Y' or 'Z'"><xsl:text>*obar*{</xsl:text></xsl:if>
<xsl:if test="(self::*/child::*[1]/self::m:mrow/child::*/text())='a' or 'c' or 'e' or 'g' or 'm' or 'n' or 'o' or 'p' or 'q' or 's' or 'u' or 'v' or 'w' or 'x' or 'y' or 'z'"><xsl:text>*orule*{</xsl:text></xsl:if>
<xsl:apply-templates/>}</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="m:mrow"><xsl:apply-templates/></xsl:template>
<xsl:template match="m:mi"><xsl:apply-templates/></xsl:template>
<xsl:template match="m:mo"></xsl:template>
</xsl:stylesheet>
必要な出力:
<chapter xmlns="http://www.w3.org/1998/Math/MathML">
<p>
<math display="block">*obar*{RT}*obar*{aA}*orule*{aa}*obar*{ah}</math>
</p>
</chapter>