XSLT Habe Probleme beim zusammesetzen eines XPath



  • Ich habe Probleme bei einem XSLT Stylesheet mir dynamisch einen XPath für eine if Bedingung zusammenzusetzen.

    Es geht darum auf Basis von Einstellungen gewisse Pakete in der XML Datei zu belassen und die anderen zu entfernen. Dazu wollte ich XSLT benutzen.

    Als Transformer Programm nutze ich momentan nxslt3

    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" exclude-result-prefixes="exsl" version="1.0">
      <xsl:output method="xml" encoding="utf-8" />
      <xsl:template match="//Block">
        <xsl:choose>
          <xsl:when test="./Paket">
            <xsl:for-each select="./Paket">
              <xsl:if test="//Pakete/{.} ='true'">
                <xsl:copy>
                  <xsl:copy-of select="@*" />
                  <xsl:apply-templates />
                </xsl:copy>
              </xsl:if>
            </xsl:for-each>
          </xsl:when>
          <xsl:otherwise>
            <xsl:copy>
              <xsl:copy-of select="@*" />
              <xsl:apply-templates />
            </xsl:copy>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
      <xsl:template match="*">
        <xsl:copy>
          <xsl:copy-of select="@*" />
          <xsl:apply-templates />
        </xsl:copy>
      </xsl:template>
    </xsl:stylesheet>
    

    Das Problem liegt in Zeile 8 des xslt Stylesheets wie bekomme ich den Namen des aktuellen XML Elements in den XPath so das die Bedingung erfolgreich währe. Habe schon concat etc versucht die Bedinung wird aber nur wahr wenn ich direkt //Pakete/test schreibe.

    Anbei auch die XML Datei:

    <?xml version="1.0" encoding="utf-8"?>
    <Test>
      <Pakete>
        <test>true</test>
      </Pakete>
      <Block>
        <Paket>test</Paket>
        <Inhalt>Test Paket</Inhalt>
      </Block>
      <Block>
        <Paket>test</Paket>
        <Inhalt>Blub Paket</Inhalt>
      </Block>
      <Block>
    		Ohne Paket
    	</Block>
    </Test>
    

    Hat jemand eine Idee wie ich den XPath in dieser Weise dynamisch hinbekomme?

    Danke schonmal



  • Wenn ich dein Problem richtig verstanden habe, dann musst du eigentlich nur mit xsl:variable den fraglichen Wert jeweils in eine Variable packen und in der Bedingung abfragen.



  • Hatte ich schon probiert und hat leider nicht funktioniert.

    Wie würde das den bei dir ausschauen?


Anmelden zum Antworten