Announcement

Collapse
No announcement yet.

Element über eine Variable ermitteln

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

  • Element über eine Variable ermitteln

    Hallo,

    ich habe eine XML (mit DATEN), die ca. so aussieht:
    HTML Code:
    <root>
      <objekt1>
        <wert1>Wert 1</wert1>
        <wert2>Wert 2</wert2>
        <wert3>Wert 3</wert3>
      <objekt1>
    </root>
    jetzt habe ich noch eine Template-XML, die solche Nodes enthält:
    HTML Code:
    <column>
      <value>wert1</value>
    </column>
    mein problem ist, dass ich (in XSL) versuche, über die Template-XML auf die Werte aus der Daten-XML zu kommen:
    (wundert euch nicht über die "sinnlosen" Codestellen; in Wirklichkeit ist mein content noch ein bisschen komplexer zu ermitteln!)
    HTML Code:
    <xsl:template name="getValue" match="column">
      <xsl:param name="daten"/>
      <xsl:variable name="valuename" select="value"/>
      <xsl:variable name="content">
        <xsl:value-of select="$daten/$valuename"/>
      </xsl:variable>
      <xsl:value-of select="$content"/>
    </xsl:template>
    habe natürlich überprüft, dass in $valuename das Richtige drinsteht; mein Problem ist allerdings, dass $daten/$valuename trotzdem nicht den Wert zurückgibt sondern immer nur $valuename
    $daten ist übrigens /root/objekt1

    also, kennt sich von euch irgendwer mit XSL so gut aus, dass er mir da weiterhelfen kann?!

    mfg, guni

  • #2
    Frage die Daten in dieser Weise mittels document()-Funktion zum Zugriff auf das Template ab:
    <xsl:value-of select="*[local-name() = document('template.xml')/column/value]"/>

    Comment


    • #3
      Hallo Thomas,

      meine Wertedatei ist sehr groß.
      ich mache also eine Schleife darüber.

      dann arbeite ich in der Schleife mit jeder Objekt-Node extra.

      zum Zeitpunkt wo get_value aufgerufen wird möchte ich mich also nicht mehr damit beschäftigen, bei welcher Objekt-Node ich gerade stehe.

      ich will einfach den Wert, der in den einzelnen Nodes steht bei Column einsetzen.
      Gibt es da keine andere Möglichkeit als in der Schleife die Document-Funktion aufzurufen?

      das würde für mich einen großen Aufwand bedeuten weil in jedem Durchlauf die Wertedatei neu geladen werden muss.
      Ausserdem müsste ich meine getValue irgendwie so umschreiben, dass immer die richtige Objektnode gefunden wird.
      Ich wüsste nicht, wie ich das erreichen soll.

      Gibt es da absolut keine andere Möglichkeit auf den Wert aus dem Template zuzugreifen?!

      mfg, guni

      Comment


      • #4
        Der Variableninhalt kann nicht direkt als Teil des XPath-Ausdrucks verwendet werden, jedoch über über den Namen innerhalb von [...]-Prädikaten. $daten/child::*[local-name() = $valuename] kann je nach Kontext zumindest unter XSLT 2.0 funktionieren.

        Comment


        • #5
          hallo Thomas,

          ja - dein Ansatz funktioniert.
          Danke!

          mfg, guni

          Comment

          Working...
          X