2012-04-11 4 views
2

Ich habe Probleme beim Formatieren der Anzeige der XML in HTML mit XSL.XML/XSLT-Transformationslogik/If-Anweisung/Bestimmte Zeile ausblenden

Ich habe die folgende XML:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<Send_Email> 
<Send_Email_lookupID>HIDE_REJECT</Send_Email_lookupID> 
<Error_Message>REJECT1</Error_Message> 
<Error_Message>REJECT2</Error_Message> 
<Error_Message>REJECT3</Error_Message> 
</Send_Email> 

Und das XSL:

<?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> 
<h2>Result</h2> 
<table border="1"> 
<xsl:for-each select="/Send_Email"> 
<xsl:if test="not(/Send_Email_lookupID)"> 
<tr> 
<td><xsl:value-of select="*"/></td> 
</tr> 
</xsl:if> 
</xsl:for-each> 
</table> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

Diese Linie immer statisch ist und ausgeblendet werden soll:

<Send_Email_lookupID>HIDE_REJECT</Send_Email_lookupID> 

Den nächsten Satz von Linien kann jedes Mal anders sein, aber alle müssen angezeigt werden.

Kann mir hier jemand helfen?

Vielen Dank im Voraus.


Update - richtige Lösung

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<html> 
<body> 
<h2>Result</h2> 
<table border="1"> 
<xsl:for-each select="Send_Email/*[local-name()!='Send_Email_lookupID']"> 
<tr> 
<td><xsl:value-of select="."/></td> 
</tr> 
</xsl:for-each> 
</table> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

Antwort

2

Ich gehe davon aus, dass Sie eine Tabelle mit einer Zeile für jede Fehlermeldung möchten - als das, was Sie suchen, ist:

Streichhölzer
<?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> 
     <h2>Result</h2> 
     <table border="1"> 
      <xsl:for-each select="Send_Email/Error_Message"> 
      <tr> 
       <td><xsl:value-of select="."/></td> 
      </tr> 
      </xsl:for-each> 
     </table> 
     </body> 
    </html> 
    </xsl:template> 

</xsl:stylesheet> 

/Send_Email_lookupID ein Wurzelelement, weil es mit / beginnt - aber in Ihrem XML ist das Element mit diesem Namen nicht das Wurzelelement.

Wenn Sie wollen nicht nur Error_Message aber jedes Element unter Send_Email außer Send_Email_lookupID Verwendungszweck anzupassen:

  <xsl:for-each select="Send_Email/*[local-name()!='Send_Email_lookupID']"> 

, die ‚alle Elemente unter Send_Email außer den Genannten Send_Email_lookupID bedeutet.

Beachten Sie auch, dass <xsl:value-of select="*"/> gibt den Text in allen Teilelemente des aktuellen Knotens enthalten ist - während <xsl:value-of select="."/> den Text in dem aktuellen Knoten enthalten ausgibt - das ist, was wir in diesem Fall wollen.

+0

Verwenden Sie wenn Sie sich basierend auf dem Wert des Knotens verstecken möchten. – Nat

+0

Es gibt immer noch null für mich zurück. Ich werde das neue XSLT in der ursprünglichen Frage veröffentlichen. – gp80586

+0

Sorry - Tippfehler - es sollte 'select =" sein. "' - Ich habe meine Antwort korrigiert – MiMo