Announcement

Collapse
No announcement yet.

XSLT-Stylesheet, Verständnisfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • XSLT-Stylesheet, Verständnisfrage

    Hallo,

    habe folgende XML-Datei:

    Code:
    <?xml version="1.0"?>
    <people>people
      <person born="1912" died="1954">person1
        <name>name1
          <first_name>Alan</first_name>
          <last_name>Turing</last_name>
        </name>
        <profession>computer scientist</profession>
        <profession>mathematican</profession>
      </person>
      <person born="1918" died="1988">person2
        <name>name2
          <first_name>Richard</first_name>
          <middle_initial>P</middle_initial>
          <last_name>Feyman</last_name>
        </name>
        <profession>physicist</profession>
        <profession>sth. else</profession>
        <hobby>Playing the bongoes</hobby>
      </person>
    </people>

    mit einem XSLT-Stylesheet möchte folgende Ausgaben erzeugen (plain):
    person1, Alan
    person2, Richard

    und mit einem anderen Stylesheet:
    Alan, person1
    Richard, person2

    Es würde mir zum Grundverständnis dienen, habe nämlich schon jede Menge ausprobiert aber nie kam das gewünschte Ergebnis raus.

    Vielen Dank
    und Gruß



    So lasse ich es übrigens immer laufen (nur zur Info):

    Code:
     
    import java.io.File;
    import javax.xml.transform.Result;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.stream.StreamResult;
    import javax.xml.transform.stream.StreamSource;
    
    public class JAXPtest {
    
       public static void main(String[] args) throws TransformerException
       {
          File xmlDatei  = new File("src/jaxp/source.xml");
          File xsltDatei = new File("src/jaxp/stylesheet.xsl");
          
          Source xmlSource  = new StreamSource(xmlDatei);
          Source xsltSource = new StreamSource(xsltDatei);
          Result ergebnis   = new StreamResult(System.out);
          
          TransformerFactory transFact = TransformerFactory.newInstance();
          
          Transformer trans = transFact.newTransformer(xsltSource);
          
          trans.transform(xmlSource, ergebnis);   
          
          
       }
    
    }

  • #2
    Die erste Ausgabe entsteht so, die zweite dann durch Anpassung:
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
      <xsl:output method="text" encoding="UTF-8"/>
    
      <xsl:template match="people">
        <xsl:apply-templates select="person"/>
      </xsl:template>
    
      <xsl:template match="person">
        <xsl:text>person</xsl:text><xsl:value-of select="position()"/><xsl:text>, </xsl:text><xsl:value-of select="name/first_name"/><xsl:text>&#xA;</xsl:text>
      </xsl:template>
    
    </xsl:stylesheet>
    Für XSLT-Fragen gibt es auch das passende Forum.

    Comment


    • #3
      Danke erst einmal.
      Habe es aber leicht anders gemeint.
      Habe unten mal die kritischen Stellen markiert.

      Der Output stimmte zwar mit Deiner Lösung, aber:

      Es soll nicht mit position() "durchgezählt" werden, sondern wirklich der Wert aus dem XML ausgelesen werden. Der könnte statt person1 auch blaBlabla sein und statt person2 quakquak

      Code:
      <?xml version="1.0"?>
      <people>people
        <person born="1912" died="1954">person1 od. blaBlabla 
          <name>name1
            <first_name>Alan</first_name>
            <last_name>Turing</last_name>
          </name>
          <profession>computer scientist</profession>
          <profession>mathematican</profession>
        </person>
        <person born="1918" died="1988">person2 od. quakquak
          <name>name2
            <first_name>Richard</first_name>
            <middle_initial>P</middle_initial>
            <last_name>Feyman</last_name>
          </name>
          <profession>physicist</profession>
          <profession>sth. else</profession>
          <hobby>Playing the bongoes</hobby>
        </person>
      </people>

      Comment


      • #4
        Ok, falsch verstanden. Ersetze
        Code:
        <xsl:text>person</xsl:text><xsl:value-of select="position()"/>
        durch
        Code:
        <xsl:value-of select="normalize-space(text())"/>
        normalize-space() entfernt Whitsepace, also hier den Zeilenumbruch.

        Comment


        • #5
          super, klappt!
          Vielen Dank!

          Comment

          Working...
          X