2010-12-09 11 views
1

Unten ist mein XML Ich möchte alle Werte von AgentSales zeigen, wenn State = OutVergleichen Knoten Wert String

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

hier ist mein 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> 

Das ist mein Fehler

Fehler beim Laden des Stylesheets: Das Analysieren eines XSLT-Stylesheets ist fehlgeschlagen.

Blockquote

Antwort

1

Zuerst müssen Sie die Apos wie \'Talking Out\' nicht "entkommen", verwenden Sie einfach 'Talking Out'.

Zweitens, die xsl:sort Anweisung einziges Kind von xsl:apply-templates oder xsl:for-each Anweisungen in XSLT 1.0

Dritter sein, der XSLT-Stil:

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

Mit diesem Eingang:

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

Ausgang :

<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

Dumme Frage, aber wenn ich Quelle Shoudl sehe ich die HTML-Tags oder nur die XML-Knoten? Weil es im Browser gut aussieht, habe ich nur erwartet, die

und Tags zu sehen, und ich nicht. – Denoteone

+0

@Denoteone: Wie führe ich die Umwandlung im Browser durch? Ein XML-Dokument mit einem PI? –

+0

Ich echo den Wert von $ Stil mit PHP $ Stil enthält meine XML-Daten als Zeichenfolge. Die Daten sehen gut in dem Browser aus Ich erwartete gerade, HMTL-Tags zu sehen, wenn ich die Quelle anzeigen – Denoteone

0

Es gibt zwei Probleme im Stylesheet Sie auf dem Laufenden: a) Sie brauchen nicht ' mit \ zu screenen, schreiben Sie einfach 'Talking Out'. b) xsl:sort kann kein Kind von xsl:if sein.

+0

die "\" sind da drin, weil dies Teil eines größeren PHP-Skripts ist. Ich werde sortieren und sehen, was ich bekommen kann. – Denoteone

0

Verwendung:

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

Auch, ein gutes Buch über XSLT lesen, zumindest die Grundlagen zu erhalten: <xsl:template>, <xsl:for-each>, <xsl:sort>, die Identität der Regel und überschreibt sie, ..., usw. .

+0

Dank Ich habe viel Zeit auf w3schools verbracht, aber war nicht viel Hilfe. – Denoteone

+0

Es ist keine gute Idee, XSLT über w3schools zu lernen. Sie sollten besser Michael Kay's Bücher und die Spezifikation lesen. – Flack