tt: Attribute verändern

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

  1. 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ß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
  2. 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