2010-12-09 4 views
1

Ниже мой XML Я хочу, чтобы показать все значения AgentSales если State = Говоря OutСравните значение узла в строку

<AgentSales> 
<AgentName>WRIGHT SIMMONS NATHANIEL</AgentName> 
<State>Talking Out</State> 
<Reason/> 
<time>3</time></AgentSales> 

вот мой XSLT

<xsl:if test="/NewDataSet/AgentSales/State[text() = \'Talking Out\']"> 

    <xsl:sort data-type="number" select="time" order="descending"/> 
    <tr> 

    <td><xsl:value-of select="AgentName"/></td> 
     <td><xsl:value-of select="State"/></td> 
    <td><xsl:value-of select="time"/></td> 

    </tr> 
</xsl:if> 

Это моя ошибка

Ошибка при загрузке таблицы стилей: Разбор таблицы стилей XSLT не удался.

Blockquote

ответ

1

Во-первых, вам не нужно «убегать» от таких, как \'Talking Out\', просто используйте 'Talking Out'.

Во-вторых, xsl:sort инструкция может быть единственным ребенком xsl:apply-templates или xsl:for-each инструкции в XSLT 1.0

В-третьих, стиль XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="Agents"> 
     <table> 
      <xsl:apply-templates> 
       <xsl:sort select="time" data-type="number" order="descending"/> 
      </xsl:apply-templates> 
     </table> 
    </xsl:template> 
    <xsl:template match="AgentSales[State='Talking Out']"> 
     <tr> 
      <xsl:apply-templates/> 
     </tr> 
    </xsl:template> 
    <xsl:template match="AgentSales/*"> 
     <td> 
      <xsl:value-of select="."/> 
     </td> 
    </xsl:template> 
    <xsl:template match="AgentSales/Reason|AgentSales"/> 
</xsl:stylesheet> 

С этим входом:

<Agents> 
    <AgentSales> 
     <AgentName>WRIGHT SIMMONS NATHANIEL</AgentName> 
     <State>Talking Out</State> 
     <Reason>whatever</Reason> 
     <time>3</time> 
    </AgentSales> 
    <AgentSales> 
     <AgentName>SOMEONE</AgentName> 
     <State>Talking In</State> 
     <Reason>whatever</Reason> 
     <time>2</time> 
    </AgentSales> 
    <AgentSales> 
     <AgentName>SOMEONE ELSE</AgentName> 
     <State>Talking Out</State> 
     <Reason>whatever</Reason> 
     <time>5</time> 
    </AgentSales> 
</Agents> 

Выход :

<table> 
    <tr> 
     <td>SOMEONE ELSE</td> 
     <td>Talking Out</td> 
     <td>5</td> 
    </tr> 
    <tr> 
     <td>WRIGHT SIMMONS NATHANIEL</td> 
     <td>Talking Out</td> 
     <td>3</td> 
    </tr> 
</table> 
0

Есть две проблемы в таблице стилей вы публикуемую: а) вам не нужно экранировать ' с помощью \, просто написать 'Talking Out'. b) xsl:sort не может быть ребенком xsl:if.

+0

«\» находятся там, потому что это часть большого PHP-скрипта. Я выберу сортировку и посмотрю, что я могу получить. – Denoteone 2010-12-09 17:04:16

0

Использование:

<xsl:template match="AgentName[../State='Talking Out']"> 
    <td><xsl:value-of select="."/></td> 
</xsl:template> 

Также, читать хорошую книгу по XSLT, чтобы получить по крайней мере основы: <xsl:template>, <xsl:for-each>, <xsl:sort>, правила идентичности и опрокинув его, ... и т.д. .

+0

Спасибо, я проводил много времени на w3schools, но не очень помог. – Denoteone 2010-12-09 17:03:56

+0

Не рекомендуется изучать XSLT через w3schools. Вы должны лучше читать книги Майкла Кей и спецификацию. – Flack 2010-12-09 17:23:55

Смежные вопросы