ubuntuusers.de

xslt zum Rausfiltern von Feldern in XML wenn variable gleich false

Status: Gelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

TheIntruder

Avatar von TheIntruder

Anmeldungsdatum:
26. Juni 2011

Beiträge: 205

Ich versuche gerade ein Stueck xslt code zu basteln, welcher eine Variable aus dem xml filtert, aber nur dann, wenn eine andere Variable false ist.

1
2
3
4
5
6
7
8
9
<xmldoc1>
<xmldoc2>
<xmldoc3>
<variable1>#Var1</variable1>
<variable2>#Var2</variable2>
<variable3>#Var3</variable3>
</xmldoc3>
</xmldoc2>
</xmldoc1>

<xmldoc1>, <xmldoc2> und <xmldoc3> existieren immer, aber <variable2> existiert nur manchmal. Die Kondition heisst if #Var2==false, dann soll <variable1> rausgefiltert werden. Der Wert von #Var1 und #Var3 ist egal.

Wenn #Var2=true dann

1
2
3
4
5
6
7
8
9
<xmldoc1>
<xmldoc2>
<xmldoc3>
<variable1>#Var1</variable1>
<variable2>#Var2</variable2>
<variable3>#Var3</variable3>
</xmldoc3>
</xmldoc2>
</xmldoc1>

Wenn #Var2=false dann

1
2
3
4
5
6
7
8
<xmldoc1>
<xmldoc2>
<xmldoc3>
<variable2>#Var2</variable2>
<variable3>#Var3</variable3>
</xmldoc3>
</xmldoc2>
</xmldoc1>

Weiss da jemand weiter?

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1274

Hallo TheIntruder,

vorweg: Mich interessiert deine Frage aber ich habe bisher noch NICHTS mit xslt gemacht. Aus diesem Grund habe ich die w2schools.com Seite mal aufgerufen und mich über das <xsl:if> Element informiert und in dem dortigen Beispiel deine Daten eingegeben:

XML Code

<catalog>
  <cd>
    <variable1>Var1cd1</variable1>
    <variable2>true</variable2>
    <variable3>Var3cd1</variable3>
  </cd>
  <cd>
   <variable1>Var1cd2</variable1>
   <variable2>false</variable2>
   <variable3>Var3cd2</variable3>
  </cd>
</catalog>

XSLT-Code

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <table border="1">
    <tr>
      <th>var1</th>
      <th>var2</th>
      <th>var3</th>      
    </tr>
    <xsl:for-each select="catalog/cd">
      <tr>
    <xsl:if test="variable2='true'">
        <td><xsl:value-of select="variable1"/></td>        
    </xsl:if>
    <xsl:if test="variable2='false'">
        <td> leer </td>        
    </xsl:if>
        <td><xsl:value-of select="variable2"/></td>
        <td><xsl:value-of select="variable3"/></td>
      </tr>
    </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Ergebnis

var1	var2	var3
Var1cd1	true	Var3cd1
leer 	false	Var3cd2

Eventuell hilft dir das ja weiter. Statt HTML tokens kann man natürlich auch XML Tokens verwenden.

Ich hoffe, es meldet sich auf deinen Post noch ein xslt Wissender, von dem ich etwas lernen kann.

TheIntruder

(Themenstarter)
Avatar von TheIntruder

Anmeldungsdatum:
26. Juni 2011

Beiträge: 205

Ne, eigentlich lautet die Loesung anders.

1
2
3
4
5
6
7
<xsl:variable name="v1"><xsl:value-of select="boolean(//variable2)" /></xsl:variable>

<xsl:template match="variable1">
    <xsl:if test="$v1='false'">
        <xsl:copy-of select="node()"/>
    </xsl:if>
</xsl:template>

shiro Team-Icon

Supporter

Anmeldungsdatum:
20. Juli 2020

Beiträge: 1274

Danke. Das ist deutlich kürzer. Wieder was dazu gelernt.

Antworten |