Thomas: Funktion id()

Hallo Ihr alle,

ich habe folgendes Fragment einer XML-Datei:

<gruppe id="A1" att2="wert1">
  <ulemente>
    <element idref="A2" name="wertxyz" />
    <element idref="A3" name="wertabc" />
  </ulemente>
</gruppe>
<gruppe id="A2" att2="wert2">
  <ulemente>
    <element idref="A4" name="wertdef" />
    <element idref="A5" name="wertghi" />
  </ulemente>
</gruppe>
<gruppe id="A3" att2="wert3">
  <ulemente>
    <element idref="A6" name="wertjkl" />
    <element idref="A7" name="wertmno" />
  </ulemente>
</gruppe>

und folgendes Fragment einer XSL-Datei:

<xsl:template match="gruppe[@att2 = 'wert1']">
<xsl:value-of select="@att2" />
<xsl:if test="count(uelemente/element) != 0">
  <xsl:apply-templates select="uelemente" />
</xsl:if>
</xsl:template>

<xsl:template match="uelemente">
<xsl:for-each select="element">
  <xsl:variable name="element_id" select="@idref" />
  <xsl:value-of select="$element_id" />xsl:text;</xsl:text>
  <xsl:value-of select="@name" />xsl:text;</xsl:text>
  <xsl:value-of select="../../../gruppe[id($element_id)]/@att2" />xsl:text-</xsl:text>
</xsl:for-each>
</xsl:template>

Ich möchte ausgehend vom Element "gruppe" mit dem Attribut [att2=wert1] alle dazugehörigen Elemente auswerten und deren Attribute auslesen sowie die referenzierten ID-Werte dazuschreiben.
Mit for-each kann ich die korrekten Werte der Elemente auslesen. Auch die Variable $element_id erhält den richtigen Wert.
Aber es gelingt mir nicht zur Variablen den richtigen Wert des Elementes "gruppe" auszulesen.

Bei m ersten Element mit idref="A2" wird die richtige id in "gruppe" ausgewählt und der richtige Wert [att2="wert2"] dazugeschrieben. Beim 2. Element wird dann aber der gleiche Wert "wert2" übergeben, hätte hier aber eigentlich "wert3" sein sollen.

Was mache ich falsch?
Wer kann helfen?
Vielen Dank für die Antworten!

Gruß
Thomas

  1. Hallo,

    Ich möchte ausgehend vom Element "gruppe" mit dem Attribut [att2=wert1] alle dazugehörigen Elemente auswerten und deren Attribute auslesen sowie die referenzierten ID-Werte dazuschreiben.

    Ist "id" auch als ID in einer DTD fefiniert? [1]

    Mit for-each kann ich die korrekten Werte der Elemente auslesen. Auch die Variable $element_id erhält den richtigen Wert.
    Aber es gelingt mir nicht zur Variablen den richtigen Wert des Elementes "gruppe" auszulesen.

    Ist die Antwort auf [1], ja, würde folgendes reichen:

    <xsl:for-each select="element">
      <xsl:value-of select="@idref" />xsl:text;</xsl:text>
      <xsl:value-of select="@name" />xsl:text;</xsl:text>
      <xsl:value-of select="id(@idref)/@att2" />xsl:text-</xsl:text>
    </xsl:for-each>

    Grüße
    Thomas

    1. Ist "id" auch als ID in einer DTD fefiniert? [1]

      *grrr* ... definiert

      Thomas

    2. Hallo,

      <xsl:for-each select="element">
        <xsl:value-of select="@idref" />xsl:text;</xsl:text>
        <xsl:value-of select="@name" />xsl:text;</xsl:text>
        <xsl:value-of select="id(@idref)/@att2" />xsl:text-</xsl:text>
      </xsl:for-each>

      Vielen Dank! das habe ich gesucht! Wunderbar!

      Gruß
      Thomas