<XSL: for-each> пропускает узлы с конкретными значениями - PullRequest
1 голос
/ 20 декабря 2010

Все еще трудно разобраться в некоторых сложных шаблонах, и любая помощь будет полезна.

Сейчас я использую простой цикл for-each, который сортирует и показывает данные в таблице. Я хочу сделать то же самое, но пропустить все узлы, где «State» = = «Talking Out» ниже - это моя текущая таблица стилей, а ниже - мой XML. Я думал, что мог бы добавить для каждого внутри текущего цикла, который игнорирует узлы, которые соответствуют моим критериям. Я избегаю одиночных кавычек, так как он является частью большого PHP-скрипта.

<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
    <table cellpadding="3" cellspacing="0" width="390">
      <tr>
        <th style="text-align:left;"><span style="font:20px arial; font-weight:bold;">Agent Name</span></th>
        <th style="text-align:center;"><span style="font:20px arial; font-weight:bold;">State</span></th>
        <th style="text-align:center;"><span style="font:20px arial; font-weight:bold;">Time</span></th>
      </tr>
      <xsl:for-each select="NewDataSet/AgentSales">
<tr>
 <xsl:if test="(position() mod 2 = 1)">
    <xsl:attribute name="bgcolor">#cccccc</xsl:attribute>
    </xsl:if>

 <xsl:if test="AgentSales[State=\'Talking Out\']">

    </xsl:if>

        <td style="text-align:left;"><span style="font:14px arial; font-weight:bold;"><xsl:value-of select="AgentName"/></span></td>
        <td style="text-align:center;"><span style="font:14px arial; font-weight:bold;"><xsl:value-of select="State"/></span></td>
    <td style="text-align:center;"><span style="font:14px arial; font-weight:bold;"><xsl:value-of select="time"/></span></td>
</tr>   

      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

вот мой XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<NewDataSet>
  <AgentSales>
    <AgentName>MCCALLISTER AARON</AgentName>
    <State>Talking Out</State>
    <Reason />
    <time>9</time>
  </AgentSales>
  <AgentSales>
    <AgentName>APPELHANS BARRY</AgentName>
    <State>Talking Out</State>
    <Reason />
    <time>1</time>
  </AgentSales>
  <AgentSales>
    <AgentName>ARREDONDO KARLA</AgentName>
    <State>Talking Out</State>
    <Reason />
    <time>0</time>
  </AgentSales>
  <AgentSales>
    <AgentName>WOOTERS CHAD</AgentName>
    <State>Talking In</State>
    <Reason />
    <time>5</time>
  </AgentSales>
  <AgentSales>
    <AgentName>LANDINI EUGENE</AgentName>
    <State>Not Ready</State>
    <Reason>TRAINING</Reason>
    <time>16</time>
  </AgentSales>
  <AgentSales>
    <AgentName>BROWN EYES JONETTE</AgentName>
    <State>Not Ready</State>
    <Reason>TRAINING</Reason>
    <time>13</time>
  </AgentSales>
</NewDataSet>

Ответы [ 2 ]

4 голосов
/ 20 декабря 2010

Сейчас я использую простой для каждого цикл, который сортирует и показывает данные в стол. Я хочу сделать то же самое но пропустить все узлы, где "State" is = to "Talking Out"

Просто замените:

  <xsl:for-each select="NewDataSet/AgentSales">

с

<xsl:for-each select="NewDataSet/AgentSales[not(State='Talking Out')]">
2 голосов
/ 20 декабря 2010

Хотя «apply-templates» может показаться неудобным по сравнению с «for-each», возможно, этот пример покажет вам его мощь ...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <body>
                <table cellpadding="3" cellspacing="0" width="390">
                    <tr>
                        <th style="text-align:left;"><span style="font:20px arial; font-weight:bold;">Agent Name</span></th>
                        <th style="text-align:center;"><span style="font:20px arial; font-weight:bold;">State</span></th>
                        <th style="text-align:center;"><span style="font:20px arial; font-weight:bold;">Time</span></th>
                    </tr>
                    <xsl:apply-templates select="NewDataSet/AgentSales[State!='Talking Out']"/>
                </table>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="AgentSales">
        <tr>
            <xsl:if test="(position() mod 2 = 1)">
                <xsl:attribute name="bgcolor">#cccccc</xsl:attribute>
            </xsl:if>
            <td style="text-align:left;"><span style="font:14px arial; font-weight:bold;"><xsl:value-of select="AgentName"/></span></td>
            <td style="text-align:center;"><span style="font:14px arial; font-weight:bold;"><xsl:value-of select="State"/></span></td>
            <td style="text-align:center;"><span style="font:14px arial; font-weight:bold;"><xsl:value-of select="time"/></span></td>
        </tr>
    </xsl:template>
</xsl:stylesheet>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...