Element mit verschiedenen Attributen kopieren
Marc
- xsl
0 Thomas J.S.0 Thomas J.S.0 Marc
Hallo!
Ich bin im Thema XSL noch blutiger Anfänger, vielleicht komme ich deswegen nicht auf die Lösung einer scheinbar so einfachen Aufgabe.
Ich habe ein XML-Element namens <p>, welches verschiedenste Attribute haben kann (aber nicht haben muss), zB param1 = "wert", param2 = "Wert2", usw.
Ich möchte dieses Element mit all seinen Attributen nun kopieren, unabhängig davon, welches Attribut nun im speziellen in einem Tag eingebunden ist.
Zusätzlich soll dies noch abhängig von einem weiteren Attribut sein:
Wenn param3 = "true", dann kopiere Tag <p> mit allen Attributen ausser param3 und füge noch das neue Attribut param4 = "andererWert" hinzu.
Wenn param3 = "false", dann kopiere Tag <p> mit allen Attributen ausser param3 und füge noch das neue Attribut param4 = "nocheinandererWert" hinzu.
Und jetzt bin ich vollkommen überfragt. Könnte mir da jemand helfen?
Viele Grüße,
Marc
Hallo,
Ich bin im Thema XSL noch blutiger Anfänger, vielleicht komme ich deswegen nicht auf die Lösung einer scheinbar so einfachen Aufgabe.
Ich habe ein XML-Element namens <p>, welches verschiedenste Attribute haben kann (aber nicht haben muss), zB param1 = "wert", param2 = "Wert2", usw.
Ich möchte dieses Element mit all seinen Attributen nun kopieren, unabhängig davon, welches Attribut nun im speziellen in einem Tag eingebunden ist.Zusätzlich soll dies noch abhängig von einem weiteren Attribut sein:
Wenn param3 = "true", dann kopiere Tag <p> mit allen Attributen ausser param3 und füge noch das neue Attribut param4 = "andererWert" hinzu.
Wenn param3 = "false", dann kopiere Tag <p> mit allen Attributen ausser param3 und füge noch das neue Attribut param4 = "nocheinandererWert" hinzu.
Und jetzt bin ich vollkommen überfragt. Könnte mir da jemand helfen?
So:
<xsl:template match="p">
<p>
xsl:choose
<xsl:when test="@param3 = 'true'">
<xsl:attribute name="param4"><xsl:value-of select="'andererWert'" /></xsl:attribute>
<xsl:copy-of select="@*[name() != 'param3']" />
</xsl:when>
xsl:otherwise
<xsl:attribute name="param4"><xsl:value-of select="'nocheinandererWert'" /></xsl:attribute>
<xsl:copy-of select="@*[name() != 'param3']" />
</xsl:otherwise>
</xsl:choose>
<p>
</xsl:template>
oder so:
<xsl:template match="p">
<p>
xsl:choose
<xsl:when test="@param3 = 'true'">
<xsl:attribute name="param4"><xsl:value-of select="'andererWert'" /></xsl:attribute>
<xsl:for-each select="@*">
<xsl:if test="name() != 'param3'">
<xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>
</xsl:if>
</xsl:for-each>
</xsl:when>
xsl:otherwise
<xsl:attribute name="param4"><xsl:value-of select="'nocheinandererWert'" /></xsl:attribute>
<xsl:for-each select="@*">
<xsl:if test="name() != 'param3'">
<xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>
</xsl:if>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
<p>
</xsl:template>
Grüße
Thomas
PS:
<p> muss natürlich geschlossen werden!
<xsl:value-of select="'andererWert'" /> und <xsl:value-of select="'nocheinandererWert'" /> entsprechend anpassen.
Grüße
Thomas
Hallo Thomas!
Ja herzlichen Dank. Ich werde das gleich mal direkt ausprobieren. Und wieder finde ich, dass diese Loesung recht einfach ist, ich waere aber noch nicht selber draufgekommen.... :-)
Viele Gruesse und danke nochmal,
Marc