Announcement

Collapse
No announcement yet.

Arrays in XSLT

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Arrays in XSLT

    Hallo

    Vielleich hat jemand von euch eine Idee oder Hinweis.

    Frage:
    Unters Beispiel sollte eine Implementation eines Array ermöglichen. Es klappt aber bei mir nicht (keinerlei Ausgabe). Ich verwende XSLT1.0 unter PHP und möchte keine Erweiterungen verwenden.

    Code:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:variable name="inline-array">
        <Item>A</Item>
        <Item>B</Item>
        <Item>C</Item>
      </xsl:variable>
      <xsl:param name="array" select="document('')/*/xsl:variable[@name='inline-array']/*"/>
      <xsl:template match="/">
        <xsl:value-of select="$array[2]"/>..
      </xsl:template>
    </xsl:stylesheet>
    Wo liegt der Fehler bzw wie ist document('') zu verstehen?

    Besten Dank voraus.

  • #2
    Es gibt keine Arrays im Datenmodell von XSLT. Du kannst Knotenmengen selektieren und darin per positionellem Prädikat einen Knoten auswählen. Das XSLT-Stylesheet ist ein XML-Dokument und kann per "document('')" eingelesen werden, dann können auch darin Knoten selektiert werden.
    Normalerweise macht man dann etwas wie
    Code:
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:data="http://example.com/mydata"
      exclude-result-prefixes="data">
      
    <data:items xmlns="">
      <item>A</item>
      <item>B</item>
      <item>C</item>
    </data:items>
    
    <xsl:template match="/">
      <xsl:value-of select="document('')/*/data:items/item[2]"/>
    </xsl:template>
    
    </xsl:stylesheet>
    dann wird "B" ausgegeben.

    Dein Versuch mit
    Code:
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:variable name="inline-array">
        <Item>A</Item>
        <Item>B</Item>
        <Item>C</Item>
      </xsl:variable>
      <xsl:param name="array" select="document('')/*/xsl:variable[@name='inline-array']/*"/>
      <xsl:template match="/">
        <xsl:value-of select="$array[2]"/>..
      </xsl:template>
    </xsl:stylesheet>
    gibt bei mir aber auch "B.." aus (getestet mit xsltproc); so das innerhalb von PHP nicht funktioniert, wurde eventuell das Stylesheet nicht von einer URL eingelesen, dann ist der XSLT-Prozessor nicht in der Lage, per "document('')" das Stylesheet zu parsen.

    Comment


    • #3
      Besten Dank für die schnelle Antwort, die Sache mit PHP teste ich gerade.

      Comment


      • #4
        Nur als Ausblick über den Tellerrand:
        XPath 3.0 bietet einen Ansatz mit den Maps. Ist natürlich jenseits von PHP & Co., außer man kann Saxon ab 9.4 PE/EE einsetzen.

        Comment

        Working...
        X