0

我可以得到一个带有三个节点之一的 xml。

<root>
  <headerA>
    <!-- Content -->
  </headerA>
</root>

代替<headerA>theres<headerB><headerС>具有相似内容的节点。在这种情况下,我希望 html 输出为:

<span> Type [X] </span> 

A、B 或 C在哪里[X]取决于元素的标签名称。

4

2 回答 2

1

正如托马拉克已经观察到的那样,您的问题相当模糊。听起来好像您可能会问如何为三种标题编写单个模板:

<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>

如果您弄清楚其中哪些对您有帮助,您将更接近于理解您要问的问题。

于 2013-06-23T15:37:08.157 回答
0
<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任何字符串。

于 2013-06-23T15:37:52.200 回答