我可以得到一个包含三个节点之一的xml。
<root>
<headerA>
<!-- Content -->
</headerA>
</root>
代替<headerA>
可以有<headerB>
或<headerС>
具有相似内容的节点。在这种情况下,我希望将 html 输出为:
<span> Type [X] </span>
其中[X]
是 A、B 或 C,具体取决于元素的标记名称。
正如托马拉克已经观察到的那样,你的问题相当模糊。 听起来好像您可能会问如何为三种类型的标头编写单个模板:
<xsl:template match="headerA | headerB | headerC">
<span>
<xsl:apply-templates/>
</span>
</xsl:template>
或者如何为它们编写相似但不同的模板:
<xsl:template match="headerA">
<span> Type A </span>
</xsl:template>
<xsl:template match="headerB">
<span> Type B </span>
</xsl:template>
<!--* Template for headerC left as an exercise for the reader *-->
或者如何编写一个模板,根据它匹配的内容执行略有不同的操作:
<xsl:template match="headerA | headerB | headerC">
<span>
<xsl:choose>
<xsl:when test="self::headerA">
<xsl:text> Type A </xsl:type>
</xsl:when>
<xsl:when test="self::headerB">
<xsl:text> Type B </xsl:type>
</xsl:when>
<!--* etc. *-->
<xsl:otherwise>
<xsl:message terminate="yes"
>I thought this could not happen.</xsl:message>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates/>
</span>
</xsl:template>
如果你弄清楚其中哪些对你有帮助,你将更接近于理解你想问什么问题。
<xsl:template match="*[starts-with(name(), 'header')]">
<xsl:variable name="type" select="substring-after(name(), 'header')" />
<span>
<xsl:value-of select="concat(' Type ', $type, ' ')" />
</span>
</xsl:template>
这将适用于任何名为 headerX
的元素,其中可以X
任何字符串。