Marc Reichelt: Microsummaries

Hallo an alle,

da ich am Freitag einen Vortrag über Firefox halten möchte, habe ich mich auch soeben über Microsummaries informiert (und bereits einen auf meiner Startseite eingebunden).
Das Ganze klappt nun hervorragend, allerdings habe ich noch ein kleines Proble mit XSL (genauer: mit XPath).

Ich habe folgende Dokumentstruktur:

  
<html>  
  ...  
  <body>  
    ...  
    <div id="main">  
      <h3><span class="headerdatum">Datum:</span> Mein erstes Microsummary</h3>  
      ...  
    </div>  
  </body>  
</html>

Nun greife ich mittels
<value-of select="/html/body/div/h3" />
auf das gesamte H3-Element zu - allerdings will ich nur den Part nach dem <span> haben (speziell: ohne das erste Zeichen, das immer ein Leerzeichen ist; noch besser: getrimmt).
Welche Pfadangabe brauche ich dafür?

Grüße

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  1. Hallo Marc,

    […]
    <h3><span class="headerdatum">Datum:</span> Mein erstes Microsummary</h3>
    […]

    Nun greife ich mittels
    <value-of select="/html/body/div/h3" />
    auf das gesamte H3-Element zu - allerdings will ich nur den Part nach dem <span> haben.

    um nur den Text, der Kind von h3 ist auszugeben, kannst Du folgenden Code verwenden:

      
    <xsl:value-of select="/html/body/div/h3/text()" />  
    
    

    Um diesen Code zu „trimmen“, kannst Du unter anderem dieses hier tun:

      
    <xsl:value-of select="normalize-space(/html/body/div/h3/text())" />  
    
    

    Gruß
    Olaf

    1. Hallo Olaf,

      um nur den Text, der Kind von h3 ist auszugeben, kannst Du folgenden Code verwenden:

      <xsl:value-of select="/html/body/div/h3/text()" />

      Ich dachte erst, dass man auf das zweite Element irgendwie zugreifen muss.
      Vermutlich gibt test() dann nur den "normalen" Text zurück. Wenn da nun also beispielsweise stehen würde:
      <h3>Dies ist ein <strong>fetter</strong> Text</h3>, dann würde die Methode text() vermutlich nur "Dies ist ein  Text" zurückgeben.
      Sehe ich das richtig?

      Um diesen Code zu „trimmen“, kannst Du unter anderem dieses hier tun:

      <xsl:value-of select="normalize-space(/html/body/div/h3/text())" />

      Super, funktioniert grandios! :-)

      Grüße

      Marc Reichelt || http://www.marcreichelt.de/

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
      1. Hallo,

        Ich dachte erst, dass man auf das zweite Element irgendwie zugreifen muss.
        Vermutlich gibt test() dann nur den "normalen" Text zurück. Wenn da nun also beispielsweise stehen würde:
        <h3>Dies ist ein <strong>fetter</strong> Text</h3>, dann würde die Methode text() vermutlich nur "Dies ist ein  Text" zurückgeben.
        Sehe ich das richtig?

        Ja. Der einfache Slash gibt alle direkten Kinder eines Elementes, also greift h3/text() auf „Dies ist ein “ und „ Text“ zu. Möchte man alle Nachfahren, so nimmt man den doppelten Slash. h3//text() gibt also zusätzlich den Textknoten „fetter“ zurück.

        Das Thema ist bei SelfHTML unter http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm@title=XPath-Syntax(beachte die  verkürzte Notation) sehr schön dargestellt.

        Gruß
        Olaf