如何减少此记录?
<xsl:template match="BR">
<br/>
</xsl:template>
<xsl:template match="B">
<strong><xsl:apply-templates /></strong>
</xsl:template>
<xsl:template match="STRONG">
<strong><xsl:apply-templates /></strong>
</xsl:template>
<xsl:template match="I">
<em><xsl:apply-templates /></em>
</xsl:template>
<xsl:template match="EM">
<em><xsl:apply-templates /></em>
</xsl:template>
<xsl:template match="OL">
<ol><xsl:apply-templates /></ol>
</xsl:template>
<xsl:template match="UL">
<ul><xsl:apply-templates /></ul>
</xsl:template>
<xsl:template match="LI">
<li><xsl:apply-templates /></li>
</xsl:template>
<xsl:template match="SUB">
<sub><xsl:apply-templates /></sub>
</xsl:template>
<xsl:template match="SUP">
<sup><xsl:apply-templates /></sup>
</xsl:template>
<xsl:template match="NOBR">
<nobr><xsl:apply-templates /></nobr>
</xsl:template>
答案 0 :(得分:2)
可能是这样的:
<xsl:template match="LI|SUB|...">
<xsl:element name="{translate(name(),
'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')}">
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
我不认为,XSLT中有一个tolower函数(至少不是1.0)
答案 1 :(得分:1)
如果要创建的元素事先不知道,只有少数已知元素需要以另一种更具体的方式处理,这里有一个更动态的解决方案:
<xsl:template match="*">
<xsl:element name="{translate(name(), $vUpper, $vLower)}">
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
其中$vUpper
和$vLower
定义为:
<xsl:variable name="vUpper" select=
"'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
"/>
<xsl:variable name="vLower" select=
"'abcdefghijklmnopqrstuvwxyz'
"/>
必须有模板匹配少数已知元素,这些元素不应按上述方式处理。这些更具体的模板将覆盖上面更通用的模板。例如:
<xsl:template match="specificName">
<!-- Specific processing here -->
</xsl:template>
此外,上面的通用模板,匹配元素应该覆盖"identity rule" (模板)。