Hallo!
Ich habe folgende Aufgabe:
meinem template wird eine Liste übergeben mit Elementen, die z.b. so
<auto_hersteller_01>VW</auto_hersteller_01>
<marke_01>Polo</marke_01>
<farbe_01>Blau</farbe_01>
<hersteller_02>Opel</hersteller_02>
<marke_02>Astra</marke_02>
<farbe_02>Rot</farbe_02>
<anzahl_autos>2</anzahl_autos>
aussehen kann.
mein Ziel ist eine Liste, die quasi objektorientiert erstellt wird:
<number>01</number>
<auto_hersteller>VW</auto_hersteller>
<marke>Polo</marke>
<farbe>Blau</farbe>
<number>02</number>
<auto_hersteller>Opel</auto_hersteller>
<marke>Astra</marke>
<farbe>Rot</farbe>
<anzahl_autos>2</anzahl_autos>
Ich habe mir bis jetzt folgendes überlegt:
das Problem ist allerdings, dass ich damit nur die Elemente auslesen kann, die auch wirklich eine Nummer im Namen haben. Alle anderen, sind zwar im ersten template noch vorhanden, werden später aber nicht mehr ausgelesen...
Wie greife ich auf die restlichen Elemente zu?
Es kann auch sein, dass meine Lösung im Ansatz schon falsch ist, daher sind auch ganz neue Vorschläge willkommen!
Vielen Dank im Voraus für eure Hilfe!
Gruß
Alex
Ich habe folgende Aufgabe:
meinem template wird eine Liste übergeben mit Elementen, die z.b. so
<auto_hersteller_01>VW</auto_hersteller_01>
<marke_01>Polo</marke_01>
<farbe_01>Blau</farbe_01>
<hersteller_02>Opel</hersteller_02>
<marke_02>Astra</marke_02>
<farbe_02>Rot</farbe_02>
<anzahl_autos>2</anzahl_autos>
aussehen kann.
mein Ziel ist eine Liste, die quasi objektorientiert erstellt wird:
<number>01</number>
<auto_hersteller>VW</auto_hersteller>
<marke>Polo</marke>
<farbe>Blau</farbe>
<number>02</number>
<auto_hersteller>Opel</auto_hersteller>
<marke>Astra</marke>
<farbe>Rot</farbe>
<anzahl_autos>2</anzahl_autos>
Ich habe mir bis jetzt folgendes überlegt:
Code:
<xsl:template name="stringreader"> <xsl:param name="wurzelknoten"/> <xsl:for-each select="$wurzelknoten"> <xsl:for-each select="*"> <xsl:variable name="nodename" select="name(.)"/> <xsl:variable name="nodevalue" select="."/> <xsl:analyze-string select="$nodename" regex="([a-z_]*[a-z]+)_?(\d+)"> <xsl:matching-substring> <xsl:variable name="newnode_name" select="regex-group(1)"/> <xsl:variable name="newnumber" select="regex-group(2)"/> <einzelnername> <xsl:element name="{$newnode_name}"> <xsl:value-of select="$nodevalue"/> </xsl:element> <nr> <xsl:value-of select="regex-group(2)"/> </nr> </einzelnername> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:element name="{$nodename}"> <xsl:value-of select="$nodevalue"/> </xsl:element> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:for-each> </xsl:for-each> </xsl:template> <xsl:template name="getDocs"> <xsl:param name="codeparser"/> <xsl:for-each-group select="$codeparser/*" group-by="nr"> <body> <number><xsl:value-of select="nr"/></number> <xsl:for-each select="current-group()/*"> <xsl:variable name="nodename" select="name(.)"/> <xsl:variable name="nodevalue" select="."/> <xsl:analyze-string select="$nodename" regex="nr"> <xsl:non-matching-substring> <xsl:element name="{$nodename}"> <xsl:value-of select="$nodevalue"/> </xsl:element> </xsl:non-matching-substring> </xsl:analyze-string> </xsl:for-each> </body> </xsl:for-each-group> </xsl:template>
Wie greife ich auf die restlichen Elemente zu?
Es kann auch sein, dass meine Lösung im Ansatz schon falsch ist, daher sind auch ganz neue Vorschläge willkommen!
Vielen Dank im Voraus für eure Hilfe!
Gruß
Alex
Comment