André Laugks: Attribute/Textknoten von

Hallo!

Ich habe folgende XML-Datei.

// XML-Datei
<liste>
  <eintrag id="2">
    <bs x="214">a</bs>
    <bs x="715">c</bs>
    <bs x="354">v</bs>
    <bs x="22">x</bs>
  </eintrag>
  <eintrag id="17">
    <bs x="1">u</bs>
    <bs x="12">r</bs>
    <bs x="9">t</bs>
    <bs x="158">z</bs>
  </eintrag>
  <eintrag id="5">
    <bs x="13">d</bs>
    <bs x="18">f</bs>
  </eintrag>
</liste>

// Auszug aus XSLT-Datei (auch HTML gekürzt)
// mit der $id greife ich auf ein bestimmtes Element "eintrag" zu
<xsl:template match="/">
 <xsl:apply-templates select="liste/eintrag[@id = $id]"/>
</xsl:template>

<xsl:template match="eintrag">
  <xsl:for-each select="bs">

</xsl:for-each>
</xsl:template>

So nehmen wir mal das folgende Element "eintrag" + Kinder.

<eintrag id="2">
   <bs x="214">a</bs>
   <bs x="715">c</bs>
   <bs x="354">v</bs>
   <bs x="22">x</bs>
</eintrag>

Nehmen wir mal an, ich befinde mich in der Schleife z.B. beim 3. Element <bs x="354">v</bs>. Wie komme ich an das Attribut und/oder Textkonten des 2. und 4. Elementes. Mal abgesehen davon, daß ich beim ersten kein Vorgänger habe bzw. beim letzten kein Nachfolger, was ich aber lösen kann.

Ich habe es mit position()-1 oder position()+1 versucht und absoluten Pfaden.

Hier mal mit dem absoluten Pfad:
<xsl:value-of select="/liste/eintrag[@id = $id]/bs[position()-1]/@x"/> liefert mir nur das attribut des ersten Kindelementes von "eintrag".

Ich habe es schon mit preceding-silbing und following-sibling versucht. Die liefen aber alle Kindkonten(Vorgänger/Nachfolger). Wobei ich mit dem Ergebnis auch nicht zufrieden war.

preceding-sibling::*/@x hat natürlich immer das Attribut des ersten Elementes geliefert.

MfG, André Laugks
L-Andre @ gmx.de

  1. Hallo!

    Uppps, ich hatte mein Betreff nicht zu Ende geschrieben :-(.

    MfG, André Laugks
    L-Andre @ gmx.de

  2. Halli,

    So nehmen wir mal das folgende Element "eintrag" + Kinder.

    <eintrag id="2">
       <bs x="214">a</bs>
       <bs x="715">c</bs>
       <bs x="354">v</bs>
       <bs x="22">x</bs>
    </eintrag>

    Nehmen wir mal an, ich befinde mich in der Schleife z.B. beim 3. Element <bs x="354">v</bs>. Wie komme ich an das Attribut und/oder Textkonten des 2. und 4. Elementes. Mal abgesehen davon, daß ich beim ersten kein Vorgänger habe bzw. beim letzten kein Nachfolger, was ich aber lösen kann.

    previous-sibling::bs[position()=1]/@x
    bzw.
    following-sibling::bs[position()=1]/@x

    cu,
    Robert

    1. Hallo!

      previous-sibling::bs[position()=1]/@x
      bzw.
      following-sibling::bs[position()=1]/@x

      Stimmt position()=1 macht auch mehr Sinn, die sind ja durchnummeriert.

      |3|   |2|    |1|    |bs|   |1|   |2|   |3|

      Danke und MfG, André Laugks
      L-Andre @ gmx.de