如果只有像 ® 这样的单个字符需要制作上标,那么您可以让 XML 没有骗子 like <sup>
,即 like
<node name="Some text ®"/>
并在处理过程中查找待上标字符。像这样的模板可能会有所帮助:
<xsl:template match="node/@name">
<xsl:param name="nameString" select="string()"/>
<!-- We're stepping through the string character by character -->
<xsl:variable name="firstChar" select="substring($nameString,1,1)"/>
<xsl:choose>
<!-- '®' can be extended to be a longer string of single characters
that are meant to be turned into superscript -->
<xsl:when test="contains('®',$firstChar)">
<sup><xsl:value-of select="$firstChar"/></sup>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$firstChar"/>
</xsl:otherwise>
</xsl:choose>
<!-- If we we didn't yet step through the whole string,
chop off the first character and recurse. -->
<xsl:if test="$firstChar!=''">
<xsl:apply-templates select=".">
<xsl:with-param name="nameString" select="substring($nameString,2)"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
然而,这种方法不是很有效,特别是如果你有很多name
属性和/或很长的name
属性。如果您的应用程序对性能至关重要,那么最好做一些测试对处理时间的影响是否合理。