XSLT выберите узел, где значение набора узлов совпадает с несколькими строками - PullRequest
0 голосов
/ 12 марта 2012

Пусть это будет 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». Я просто хочу отделить «а» и «б» от всего остального. Таким образом, выходной пример будет

Основные предметы (а и б)

  • Экономика Финансы Математика

Другие

  • Искусство

Теперь у меня есть этот код для части "Другие":

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

Это не работает должным образом. Я пробовал без не () и с! =

Короче говоря, я просто хочу знать, есть ли какой-либо элемент помимо элементов группы a и b. Если есть, напечатайте что-нибудь, если ничего нет, не печатайте заголовок «Другие».

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 12 марта 2012
<?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' оба в порядке,

...