HaThoV: DATA in XSLT???

Moin Gemeinde,

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

  
<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. Mit

  
<xsl:for-each select="link">  

kann ich zwar die Links extrahieren, aber wie extrahiere ich den ersten Textknoten unter <linklist>? Eigentlich sollte das doch ganz einfach gehen.

  
<xsl:for-each select="#text">  

funktioniert jedenfalls nicht.

Hoffe jemand hat 'ne Idee...

mfg
T.

--
"they got the guns - we got the number" - James Douglas Morrison
  1. Hallo HaThoV,

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

    <xsl:value-of select="linkliste/text()"/>

    Grüße,
    Thomas

    1. Thnx auch Dir,

      <xsl:value-of select="linkliste/text()"/>

      Grüße,
      Thomas

      mfg
      T.
      (auch Thomas :)

      --
      "they got the guns - we got the number" - James Douglas Morrison
  2. 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

    1. Hallo Christian,

      Als kurzes Merkblatt für sowas:
        node() matcht jeden Knoten
        text() matcht jeden Textknoten (auch <![CDATA[ ]]>)

      Das habe ich gebraucht und nirgends gefunden... Dankeschön!

      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>

        
      Ist logischer. Das ist richtig. Ich will aber extra sparsam mit den Tags sein, was mir dann so blöde Probleme bereitet... :)  
        
      Also danke nochmal...  
        
      mfg  
      T.
      
      -- 
      \---  
      "they got the guns - we got the number" - James Douglas Morrison
      
  3. @@HaThoV:

    in ungefähr so ein HTML-Konstrukt
    <span>Begriff
    <span class="LinkListe">
       <a href="abc">ABC</a>
       <a href="def">DEF</a>
       <a href="ghi">GHI</a>
    </span>
    </span>
    umwandeln.

    Frei nach wahsaga: "Ich möchte furchtbar gern eine Liste sein, bitte bitte lass mich doch ...!!!1"

    Live long and prosper,
    Gunnar

    --
    „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
    1. Moin Gunnar,

      Frei nach wahsaga: "Ich möchte furchtbar gern eine Liste sein, bitte bitte lass mich doch ...!!!1"

      Nö. Die Liste war wie gesagt nicht das Problem. Das war der Fließtextbezeichner, der gerufen hat: "Ich will aber ohne die anderen sichtbar sein!"

      Live long and prosper,
      Gunnar

      So do you. I do my best.

      mfg
      T.

      --
      "they got the guns - we got the number" - James Douglas Morrison
      1. @@HaThoV:

        Nö. Die Liste war wie gesagt nicht das Problem.

        Natürlich nicht das XSLT-Problem. Das Problem daran ist, dass du schlechtes HTML erzeugen willst.

        Live long and prosper,
        Gunnar

        --
        „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
        1. Moin Gemeinde,

          @@HaThoV:

          Nö. Die Liste war wie gesagt nicht das Problem.

          Natürlich nicht das XSLT-Problem. Das Problem daran ist, dass du schlechtes HTML erzeugen willst.

          Bist Du da sicher? Ich habe mir nur erlaubt, zur Verdeutlichung meines Problems auf ein UL/LI-Konstrukt zu verzichten, weil's darum eben nicht geht.

          Aber wenn Du's gerne dogmatisch "politically correct", dafür aber etwas umständlicher hast - bitteschön:

            
          <div>Begriff  
           <ul>  
            <li><a href="abc">ABC</a></li>  
            <li><a href="def">DEF</a></li>  
            <li><a href="ghi">GHI</a></li>  
           </ul>  
          </div>  
          
          

          Zufrieden?

          mfg
          T.

          --
          "they got the guns - we got the number" - James Douglas Morrison
          1. @@HaThoV:

            <div>Begriff
            <ul>
              <li><a href="abc">ABC</a></li>
              <li><a href="def">DEF</a></li>
              <li><a href="ghi">GHI</a></li>
            </ul>
            </div>

            Zufrieden?

            Fast.

            Es gibt mehrere Begriffe mit jeweils ihrer eigenen Linkliste? Dann wäre es auch eine Liste von Begriffen:

            <dl>  
              <dt>Begriff 1</dt>  
              <dd>  
                <ul>  
                 <li><a href="abc">ABC</a></li>  
                 <li><a href="def">DEF</a></li>  
                 <li><a href="ghi">GHI</a></li>  
                </ul>  
              </dd>  
              <dt>Begriff 2</dt>  
              <dd>  
                <ul>  
                 <li><a href="jkl">JKL</a></li>  
                 <li><a href="mno">MNO</a></li>  
                 <li><a href="pqrs">PQRS</a></li>  
                </ul>  
              </dd>  
            </dl>
            

            So richtig gut ist das auch nicht, aber das liegt an dem Schwachpunkt in der HTML-Spezifikation. [[http://forum.de.selfhtml.org/archiv/2007/10/t160872/#m1046502]]

            Live long and prosper,
            Gunnar

            --
            „Das Internet ist ein großer Misthaufen, in dem man allerdings auch kleine Schätze und Perlen finden kann.“ (Joseph Weizenbaum)
            1. Moin nochma Gunnar,

              Es gibt mehrere Begriffe mit jeweils ihrer eigenen Linkliste? Dann wäre es auch eine Liste von Begriffen:

              Danebengetippt. Es geht um verstreute Begriffe im Fließtext, die einen eindimensionalen Linkvektor beherbergen können anstatt nur eines simplen Mono-Verweises.

              Wir können an anderer Stelle ja gerne über die optimale Ausgestaltung meines fünfdimensionalen CSS-Menüs diskutieren, aber hier ging's wirklich nur um eine simple XSLT-Frage... :)

              Den anderen danke nochmal für die prompte Beantwortung.

              mfg
              T.

              --
              "they got the guns - we got the number" - James Douglas Morrison
        2. Leider sind solche Konstrukte nicht gar zu selten anzutreffen. So setzen etwa große Übersetzungstool bzw. Gesetzestextsoftware solch ärgerlich konstrukte in die Welt. Hatte mich auch schon Nerven gekostet.

          @@HaThoV:

          Nö. Die Liste war wie gesagt nicht das Problem.

          Natürlich nicht das XSLT-Problem. Das Problem daran ist, dass du schlechtes HTML erzeugen willst.

          Live long and prosper,
          Gunnar