Announcement

Collapse
No announcement yet.

Probleme mit Positionsausgabe

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

  • Probleme mit Positionsausgabe

    Hallo!

    Vermutlich ist das ein absoluter Anfängerfehler, aber ich sitze einfach auf dem Schlauch.

    Ich habe ein XML das folgendermaßen aussieht:
    Code:
    <Context>
    
    	<Text>Text 1</Text>
    	<Sonstiges>sonstiges</Sonstiges>
    	<Text>Text 2</Text>
    	<Text>Text 3</Text>
    	<Sonstiges>sonstiges</Sonstiges>
    	<Text>Text 4</Text>
    	
    </Context>
    Jetzt will ich nur die Elemente <Text> zählen und vor dem Inhalt ausgeben. Das Ergebnis soll also folgendes sein:

    Code:
    <Context>
    <Text><Context>
    	<Text>1 Text 1</Text>
    	<Sonstiges>sonstiges</Sonstiges>
    	<Text>2 Text 2</Text>
    	<Text>3 Text 3</Text>
    	<Sonstiges>sonstiges</Sonstiges>
    	<Text>4 Text 4</Text>
    </Context>
    Eigentlich müsste ich das ja über die Funktion position() lösen können. Aber egal, was ich auch anstelle, er zählt mir die Elemente <Sonstiges> immer mit, so dass es z.B. heißt "6 Text 4"

    Kann mir jemand helfen?

    Viele Grüße,
    Meike

  • #2
    Da vom verwendeten XSLT-Stylesheet nichts zu sehen ist, wird sich wohl position() auf die Elementknoten unterhalb von Context beziehen und hier sind die Text-Elemente auch an den Positionen 1/3/4/6 lokalisiert. Ändere die Template-Aufrufhierarchie oder verwende diesen Ansatz:

    Code:
    <xsl:template match="@* | node()">
      <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
      </xsl:copy>
    </xsl:template>
    
    <xsl:template match="Text">
      <Text><xsl:value-of select="concat(1 + count(preceding-sibling::Text),' ',.)"/></Text>
    </xsl:template>
    Ergebnis:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
      <Text>1 Text 1</Text>
      <Sonstiges>sonstiges</Sonstiges>
      <Text>2 Text 2</Text>
      <Text>3 Text 3</Text>
      <Sonstiges>sonstiges</Sonstiges>
      <Text>4 Text 4</Text>
    </Context>

    Comment


    • #3
      Das werde ich versuchen. VIELEN, VIELEN DANK!!!

      Comment

      Working...
      X