Christian Seiler: Textknoten mit XSLT matchen

Beitrag lesen

Hallo!

ich bin schier am Verzweifeln. Ich möchte nämlich folgendes XML-Konstrukt

<linkliste>Begriff
<link uri="abc">ABC</link>
<link uri="def">DEF</link>
<link uri="ghi">GHI</link>
</linkliste>


> in ungefähr so ein HTML-Konstrukt  
> ~~~html
  

> <span>Begriff  
>  <span class="LinkListe">  
>    <a href="abc">ABC</a>  
>    <a href="def">DEF</a>  
>    <a href="ghi">GHI</a>  
>  </span>  
> </span>  
> 

umwandeln. Ich finde aber keinen Weg, mit XSLT "Begriff" zu isolieren.

<xsl:value-of select="text()" /> im Kontext der linkliste-Node.

Als kurzes Merkblatt für sowas:
  node() matcht jeden Knoten
  text() matcht jeden Textknoten (auch <![CDATA[ ]]>)
  * matcht jedes Element
  foo matcht ein Element namens 'foo'
  processing-instruction() matcht jede PI (<?...?>)
  processing-instruction(xml-stylesheet) matcht jede PI, deren Typ
       xsl-stylesheet ist (d.h. <?xml-stylesheet ...?>)
  comment() matcht jedes Kommentar (allerdings darf ein XML-Parser
       Kommentare wegwerfen, d.h. man sollte sich nicht darauf verlassen)

Ich frage mich jedoch, ob Dein XML-Datenmodell wirklich ideal ist, ich würde ja eher so etwas machen wollen:

<linkliste>  
  <begriff>Begriff</begriff>  
  <link uri="abc">ABC</link>  
  ...  
</linkliste>

Dann ist sowas nämlich strukturell eindeutig und Du kannst z.B. per DTD forcieren, dass das Inhaltsmodell von linkliste sowas sein soll wie (begriff, link+) - wenn du PCDATA innerhalb von linkliste erlaubst, wäre auch folgendes ein gültiges Dokument nach der DTD, auch wenn es relativ sinnlos wäre:

<linkliste>  
  <link uri="abc">ABC</link>  
  Begriff  
  <link uri="def">DEF</link>  
  ...  
</linkliste>

Mein obiges XSLT würde natürlich auch hier "Begriff" korrekt isolieren (vmtl. müsstest Du aber auch noch normalize-space() darauf anwenden, um überflüssige Leerzeichen loszuwerden), aber sehr sinnvoll erscheint's mir trotzdem nicht.

Viele Grüße,
Christian