XSLT选择节点,其中nodeset的值匹配多个字符串

时间:2012-03-12 06:40:30

标签: xslt xslt-1.0

让这是xml:

... some other parent elements here ...
<subject group="a">Economy</subject>
<subject group="b">Math</subject>
<subject group="a">Finance</subject>
<subject group="c">Arts</subject>
... some other elements here 

我想处理并打印一个标题,其中组'a'和'b'在一个标题下,c在另一个标题中。 'C'不是一个确定的字符串,它可以是'd','d'。我只想从其他任何东西中分离出'a'和'b'。因此,示例输出将是

主要科目(a和b)

  • 经济金融数学

其他

现在,我有“其他”部分的代码:

<xsl:if test="not(subject/@group[. = 'a'] or subject/@group[. = 'b])">
                <h2>Others</h2> 
                <ul>
                    <xsl:for-each select="subject">      
                        <xsl:sort select="./@group"/>
                        <xsl:if test="@group!='a'and @type!='b'">
                            <xsl:apply-templates select="."/>
                        </xsl:if>
                    </xsl:for-each>
                </ul>
</xsl:if> 

这不能正常工作。我试过没有not()和!=

简而言之,我只是想知道除了a组和b组之外是否还有其他元素。如果有,请打印一些东西,如果没有,请不要打印标题“其他”。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html"/>
  <xsl:template match="/">
    <h2>Main Subjects</h2>
    <ul>
      <xsl:for-each select="//subject[@group/.='a' or @group/.='b']">
        <li>
          <xsl:value-of select="."/>
        </li>
      </xsl:for-each>
    </ul>
    <h2>Others</h2>
    <ul>
      <xsl:for-each select="//subject[not(@group/.='a' or @group/.='b')]">
        <li>
          <xsl:value-of select="."/>
        </li>
      </xsl:for-each>
    </ul>
  </xsl:template>
</xsl:stylesheet>

编辑: @group/.='a'@group ='a'两者都没问题,