Alex Hansolo: XML im XSL auslesen

Hallo zusammen,

ich habe ein XML String einer Veriable zugewiesen.
<xsl:variable name="test"><![CDATA[
   <?xml version="1.0" encoding="utf-8"?>
      <meta>
          <option1>123</option1>
          <option2>ABC</option2>
          <option3>123ABC</option3>
      </meta>
]]></xsl:variable>

Nun möchte ich diesen String via Schleife durchiterieren und sämtliche Optionen einer neuen Variable zuweisen bzw. erst mal nur ausgeben. Nix da, will nicht.
<xsl:for-each select="$test//*">
   <xsl:value-of select="."/>
</xsl:for-each>

Oder direct über auf die XML Option zugreifen ohne es vorher eine Variable zuweisen zu müssen, via xPath.
<xsl:value-of select="$test//meta/option1"/>

Leider bin ich eine absolute Null in Sache XSLT und nach 3h Internet bin ich kein Stück weiter.
Ich hoffe jemand kennt sich damit besser aus und kann mir helfen.

Danke

  1. Hallo Alex,

    Oder direct über auf die XML Option zugreifen ohne es vorher eine Variable zuweisen zu müssen, via xPath.
    <xsl:value-of select="$test//meta/option1"/>

    Das lässt sich mit XSLT 2.0 so lösen:

    <?xml version="1.0" encoding="UTF-8"?>  
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
      
      <xsl:variable name="test">  
        <meta>  
          <option1>123</option1>  
          <option2>ABC</option2>  
          <option3>123ABC</option3>  
        </meta>  
      </xsl:variable>  
      
      <xsl:template match="/">  
        <xsl:value-of select="$test//option1"/> <!-- 123 -->  
      </xsl:template>  
      
    </xsl:stylesheet>
    

    Hinweis: Der genannte CDATA-Abschnitt ist kontraproduktiv, weil sich darüber nicht mehr auf die Struktur zugreifen lässt, sondern nur auf den kompletten String darin.

    Alternativer Zugriff – auch für XSLT 1.0 – aus einer externen XML-Struktur via document()-Funktion.

    Grüße,
    Thomas

    1. Das lässt sich mit XSLT 2.0 so lösen:

      Hallo Thomas,
      danke sehr aber leider steht Version 2.0 uns nicht zur Verfügung.

      Alternativer Zugriff – auch für XSLT 1.0 – aus einer externen XML-Struktur via document()-Funktion.

      Ich werde es mir näher ansehen.

      1. Hallo nochmal,

        die document() Function bring mich leider nicht weiter da die XML in keiner seperaten Datei festgehalten wird sondern im XML Node zur Verfügung gestellt wird.

        1. Hallo Alex,

          die document() Function bring mich leider nicht weiter da die XML in keiner seperaten Datei festgehalten wird sondern im XML Node zur Verfügung gestellt wird.

          Falls die Nutzung von JavaScript möglich ist, wäre vielleicht die Nutzung von XSLT 2.0 mit Saxon-CE interessant, siehe diesen kürzlich gehaltenen Vortrag.

          Wenn auch das keine Option ist, dann probiere die Auswertung des CDATA-Strings mit Zeichenketten-Funktionen wie substring(), substring-before(), substring-after(), siehe http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm@title=XPath-Syntax.

          Grüße,
          Thomas