Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


xsl:attribute

Zusammenfassung:

Mit der Anweisung xsl:attribute ist es möglich, ein Attribut in eine XML- bzw. HTML-basierte Zielstruktur einzufügen.

xsl:attribute

Dafür gibt es mehrere Möglichkeiten. Ein Weg ist, ein Attribut direkt in Attributschreibweise zu implementieren. In diesem Fall hilft die "Kurzschreibweise" "{}", Werte zuzuweisen.

Eine Alternative ist, mit Hilfe von xsl:attribute den Namen des Attributs zu definieren und mit Hilfe von xsl:value-of select die Werte zuzuweisen.

<Person nachname="{name}">
  <xsl:attribute name="vorname">
    <xsl:value-of select="vorname"/>
  </xsl:attribute>
</Person>

Das Ergebnis mag so aussehen:

   <Person nachname="Sinnlos" vorname="Susi"/>

Eine weitere Alternative ist die Arbeit mit einer xsl-Variable, die ein komplexes Element "p" mit zwei Attributen "nachname" und "vorname" definiert.

  <xsl:variable name="vPerson">
    <p nachname="Holzflos" vorname="Hugo"/>
  </xsl:variable>

Darüber hinaus besteht noch die Möglichkeit, ein xsl:attribute-set zu deklarieren, das eine ganze Anzahl einzelner xsl:attribute vordefiniert. Das hat den Vorteil, daß häufig benutzte Attribut-Sets nur einmal deklariert werden müssen, um sie beliebig oft wieder verwenden zu können. Zum Einsatz kommt dieses Verfahren beispielsweise bei zahlreichen Attribut-orientierten Elementen wie etwa der Layout-Konfiguration von HTML oder FormattingObject (FO, z.B. PDF).

  <xsl:attribute-set name="as_Person">
    <xsl:attribute name="nachname">Rielos</xsl:attribute>
    <xsl:attribute name="vorname">Lotte</xsl:attribute>
  </xsl:attribute-set>

Zudem kann ein xsl:attribute-set sich auch auf ein anderes xsl:attribute-set beziehen und dieses einbinden, z.B.

  <xsl:attribute-set name="mit_Hobby" 
       xsl:use-attribute-sets="as_Person">
    <xsl:attribute name="hobby">XSLT</xsl:attribute>
  </xsl:attribute-set>

Damit würde ein neues xsl:attribute-set namens "mit_Hobby" entstehen, das die drei Attribute nachname, vorname und hobby beinhaltet.

Um die Ansätze miteinander zu vergleichen, schauen wir uns das Template "Attributdemo" an:

  <xsl:template name="Attributdemo">
    <Person nachname="Sinnlos">
      <xsl:attribute name="vorname">Susi</xsl:attribute>
    </Person>
    <Person xsl:use-attribute-sets="as_Person" />
    <Person>
      <xsl:copy-of select="$vPerson/p/@*"/>
    </Person>    
  </xsl:template>

Der Aufruf dieses Templates generiert drei "Person"-Elemente mit folgenden Attributen:

   <Person nachname="Sinnlos" vorname="Susi"/>
   <Person nachname="Rielos" vorname="Lotte"/>
   <Person nachname="Holzflos" vorname="Hugo"/>

So weit, so gut. Alle drei Verfahren generieren jeweils ein Attribut "nachname" und ein Attribut "vorname", jeweils mit unterschiedlichen Inhalten - auch wenn es überraschen mag, daß ein xsl:copy-of ausreicht, um in ein Element Attributwerte einzubinden.

Etwas unübersichtlich (höherer Zeitaufwand für das Maintenance!) kann es jedoch werden, wenn diese Gestaltungsmöglichkeiten für dieselben Attribute konkurrierend verwendet werden. Da Attribute gleichen Namens jeweils nur einmal auftreten dürfen, ist entweder zu erwarten, daß der XSL-Prozessor sich weigert, oder daß die Attributwerte überschrieben werden. Welche Inhalte gewinnen?

  <Person nachname="Sinnlos" xsl:use-attribute-sets="as_Person" >
    <xsl:attribute name="vorname">Susi</xsl:attribute>
    <xsl:copy-of select="$vPerson/p/@*"/>
  </Person>

Hier zeigen sich Unterschiede im Prozessoraufruf. Einige Prozessoren weigern sich glattweg, so etwas mitzumachen. Es gibt aber auch XSL-Prozessoren (auch für XSL 2.0 und 3.0), die nicht meckern, sondern die Werte überschreiben. The winner is:

   <Person nachname="Holzflos" vorname="Hugo"/>

qrpic/xsl_attribute.jpg

wg / 14. Oktober 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

Mobil: 0151. 750 360 61 * eMail: info10@wilfried-grupe.de