我可以得到一个带有三个节点之一的 xml。
<root>
<headerA>
<!-- Content -->
</headerA>
</root>
代替<headerA>
theres<headerB>
或<headerС>
具有相似内容的节点。在这种情况下,我希望 html 输出为:
<span> Type [X] </span>
A、B 或 C在哪里[X]
取决于元素的标签名称。
正如托马拉克已经观察到的那样,您的问题相当模糊。听起来好像您可能会问如何为三种标题编写单个模板:
<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
任何字符串。