Attribute verändern
tt
- xsl
Hi,
kann mir bitte jemand bei folgendem Problem helfen:
Ein XML-Dokument besteht aus verschiedenen Elementen. Diese Elemente können unterschiedliche Attribute haben. Das Attribut a ist eine Zahl. Diese Zahl soll erhöht werden, wenn gleichzeitig in dem selben Element das Attribut b auftritt. Bei einem bestimmten Wert des Attributs b soll a um 5 erhöht werden.
<xsl:template match="@a">
??? wie kann ich hier die Existenz und den Wert von b testen und Veränderungen an dem Attribut a sowie dem Attribut b vornehmen ???
</xsl:template>
Vielen Dank im Voraus!
Gruß Tini
Hellihello
<xsl:template match="@a">
??? wie kann ich hier die Existenz und den Wert von b testen und Veränderungen an dem Attribut a sowie dem Attribut b vornehmen ???
</xsl:template>
Macht es nicht mehr Sinn erstmal zu überlegen, ob das ein sinnvoller Ansatz ist:
a) wie schaut das komplette Dokument und das gewünscht Ergebnis aus
b) was gäbe es noch für Möglichkeiten, außer mit XSL - wird zB sowies php verwandt?
Dank und Gruß,
Hallo tt,
<xsl:template match="@a">
??? wie kann ich hier die Existenz und den Wert von b testen und Veränderungen an dem Attribut a sowie dem Attribut b vornehmen ???
</xsl:template>
Versuch unter Annahme dieser XML-Struktur:
<?xml version="1.0" encoding="ISO-8859-1"?>
<test>
<el a="1" b="2"/>
<el a="3" b="4"/>
<el a="5"/>
</test>
Transformation:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@a">
<xsl:choose>
<xsl:when test="../@b">
<xsl:attribute name="a">
<xsl:value-of select="number(.) + 1"/>
</xsl:attribute>
<xsl:attribute name="b">
<xsl:value-of select="number(../@b) + 2"/>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="a">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="@b"/>
Ergebnis:
<?xml version="1.0" encoding="ISO-8859-1"?>
<test>
<el a="2" b="4"/>
<el a="4" b="6"/>
<el a="5"/>
</test>
Das dritte Element ohne b bleibt also bezüglich a unverändert. Bei den Elementen mit a und b werden Werte addiert.
Grüße,
Thomas