0
請建議如何合併具有相同名稱的元素[element mi only]連續出現。只有元素英里 [沒有任何屬性]只需要合併。 元素MI可能有任何父項。如何合併連續發現的同名元素
XML:
<article>
<math>
<mtext>one</mtext>
<mi>i</mi>
<mi>n</mi>
<mi>s</mi>
<mi>t</mi>
<mtext>The</mtext>
<mi>s</mi>
<mi>m</mi>
<mrow>
<mi>a</mi>
<mi>l</mi>
<mi>l</mi>
</mrow>
<mi>y</mi>
<mn>8</mn>
<mi>z</mi>
</math>
</article>
XSLT:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy><xsl:apply-templates select="@* | node()"/></xsl:copy>
</xsl:template>
<xsl:template match="mi">
<xsl:choose>
<xsl:when test="not(preceding-sibling::*[name()='mi'][1]) and not(following-sibling::*[name()='mi'][1])">
<xsl:copy><xsl:apply-templates select="@* | node()"/></xsl:copy>
</xsl:when>
<xsl:when test="following-sibling::*[1][name()='mi']">
<xsl:variable name="varcnt">
<xsl:value-of select="count(following-sibling::*)"/>
</xsl:variable>
<xsl:copy>
<xsl:for-each select="1 to number($varcnt)">
<xsl:if test="name()='mi'">
<xsl:apply-templates/>
</xsl:if>
</xsl:for-each>
</xsl:copy>
</xsl:when>
<xsl:otherwise><xsl:copy><xsl:apply-templates select="@* | node()"/></xsl:copy></xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
所需的輸出:
<article>
<math>
<mtext>one</mtext>
<mi variant="italic">inst</mi>
<mtext>The</mtext>
<mi variant="italic">sm</mi>
<mrow>
<mi variant="italic">all</mi>
</mrow>
<mi>y</mi>
<mn>8</mn>
<mi>z</mi>
</math>
</article>
先生,非常感謝您的不錯的代碼和建議,再加上1。 –