2010-12-09 88 views
1

下面是我的XML我想顯示AgentSales的所有值,如果狀態=說着拿出比較節點值的字符串

<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樣式表失敗。

塊引用

回答

1

首先,您不需要「逃避」像\'Talking Out\'這樣的錯誤,只需使用'Talking Out'即可。

其次,xsl:sort指令只能是xsl:apply-templatesxsl: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

有兩個問題在您發佈的樣式表:1)你不需要使用\篩選',只寫'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

通過w3schools學習XSLT並不是一個好主意。你應該更好地閱讀邁克爾凱的書籍和規範。 – Flack 2010-12-09 17:23:55