Nummerierung unabhängig von der Verschachtelung

seppo05

Grünschnabel
Ich habe folgende XML-Struktur:

Code:
<A Zeit="13:42">
  <B Zeit="14:36">
    <C Zeit="07:07"></C>
    <C Zeit="12:02"></C>
  </B>
  <B Zeit="14:36">
    <C Zeit="07:07"></C>
    <C Zeit="12:02"></C>
    <C Zeit="02:53"></C>
    <C Zeit="02:54"></C>
  </B>
</A>


Jedes Element hat ein "Zeit"-Attribut. Damit ich später im HTML bzw. Javascript mit getElementById() auf die Zeit-Attribute zugreifen kann brauch ich unique IDs mit einer fortlaufenden Nummerierung (Oder gibts eine Lösung, dass ich meine HTML-Elemente alle "Zeit" nenne, und dann irgendwie alle adressieren kann mit so etwas wie "getElementById(Zeit*)"?

Die HTML-Element-IDs sollten dann z.b. so aussehen: Zeit_0, Zeit_1, Zeit_2 usw. Gibt es dafür eine Lösung? Die Zählerlösungen die man googeln kann, haben immer den Nachteil das sie auf einer festen Obergrenze beruhen. Da ich aber nicht weiss wie viele Elemente es bei mir sind, kann ich so etwas nicht verwenden. Außerdem muss es mir, egal wo ich mich in meinem xsl befinde, immer eine neue Zahl liefern.

HTML:
<div> <xsl:attribute name="id">####### HIER NEUE ID Nummer ##### </xsl:attribute></div>


Mit number und count hab ich es auch schonmal probiert, habe aber keine Lösung gefunden, die zu meinem Problem passt. Ich müsste ausgehend vom root-Element eine Nummerierung haben, die für jedes Element dadrunter, unabhängig von der Verschachtelung, die Elemente durchzählt.

Code:
1. <A Zeit="13:42">
2.   <B Zeit="14:36">
3.     <C Zeit="07:07"></C>
4.     <C Zeit="12:02"></C>
</B>
5.   <B Zeit="14:36">
6.     <C Zeit="07:07"></C>
7.     <C Zeit="12:02"></C>
8.     <C Zeit="02:53"></C>
9.     <C Zeit="02:54"></C>
  </B>
</A>
Ich hoffe es ist noch verständlich :)

Gruß
 
... Ich müsste ausgehend vom root-Element eine Nummerierung haben, die für jedes Element dadrunter, unabhängig von der Verschachtelung, die Elemente durchzählt...
Hallo,
genau das macht xsl:number (fortlaufende Nummerierung)

Wenn man das auf dein oben stehendes XML-Dokument anwendet, dann bekommt man eigentlich, was du haben willst. :confused:

XSL:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:attribute name="nr">
      <xsl:number level="any" count="*" format="1" />
    </xsl:attribute>
    <xsl:apply-templates select="@*|node()" />
  </xsl:copy>
</xsl:template>
<xsl:template match="comment()|processing-instruction()" />

</xsl:stylesheet>
Transformationsergebnis:
Code:
<A nr="1" Zeit="13:42">
  <B nr="2" Zeit="14:36">
    <C nr="3" Zeit="07:07" />
    <C nr="4" Zeit="12:02" />
  </B>
  <B nr="5" Zeit="14:36">
    <C nr="6" Zeit="07:07" />
    <C nr="7" Zeit="12:02" />
    <C nr="8" Zeit="02:53" />
    <C nr="9" Zeit="02:54" />
  </B>
</A>
 

Neue Beiträge

Zurück