Announcement

Collapse
No announcement yet.

xml-Inhalt 1:1 mittels xslt ausgeben

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

  • xml-Inhalt 1:1 mittels xslt ausgeben

    Hallo zusammen

    Ich möchte den Inhalt einer xml Datei 1:1, d.h. unverändert, mittels xslt-Stylesheet ausgeben.

    Ich verwende den Xalan xslt Prozessor v2.7.0.

    Siehe Dateien booklist_xml.txt, booklist_xsl.txt.

    Aufruf und Output:
    c:\>java org.apache.xalan.xslt.Process -in booklist.xml -xsl booklist.xsl
    <?xml version="1.0" encoding="iso-8859-1"?>

    a
    7

    b
    89

    c:\


    Der gewünschte Output wäre (identisch wie die xml Datei):
    <?xml version="1.0"?>
    <Catalog>
    <Book>
    <Title>a</Title>
    <Pages>7</Pages>
    </Book>
    <Book>
    <Title>b</Title>
    <Pages>89</Pages>
    </Book>
    </Catalog>


    Besten Dank für Euer Feedback.
    durdi
    Attached Files

  • #2
    mir ist nicht ganz klar, wo deine Daten herkommen, gibst du die Daten
    <?xml version="1.0" encoding="iso-8859-1"?>

    a
    7

    b
    89
    direkt in die Konsole ein, oder stehen die in einer XML-/txt-Datei?
    Deine Angabe enthält ja lediglich Zahlen und keine Tags. Demnach können auch keine Tags abgearbeitet werden.
    Deiner XSL nach zu Urteilen willst du ein bestehendes XML Dokument einfach "kopieren".
    Dazu reicht es nicht einfach
    Code:
    <xsl:apply-templates/>
    zu nehmen.
    Dann würdest du lediglich alle Textknoten hintereinander weg ausgegeben bekommen.
    Ich kenne zwei Möglichkeiten XML 1:1 zu Kopieren.

    1. Erweitere dein XSL durch Templates für jedes auszugebende Element. Darin wird das Tag neu geschrieben und der entsprechende Inhalt rein kopiert.
    Code:
    ...
    <xsl:template match="book">
      <xsl:element name="book">
        <xsl:value-of select="."/>
      <xsl:element>
    <xsl:apply-templates/>
    </xsl:template>
    
    <xsl:template match="pages">
      <xsl:element name="pages">
        <xsl:value-of select="."/>
      <xsl:element>
    <xsl:apply-templates/>
    </xsl:template>
    
    <!-- oder so -->
    
    <xsl:template match="title">
      <title>
        <xsl:value-of select="."/>
      </title>
    <xsl:apply-templates/>
    </xsl:template>

    2. Mit <xsl:copy> gehts noch einfacher. Das kannst du benutzen um einen XML-Baum mit samt den Tags zu kopieren und auszugeben.
    Code:
    <xsl:copy>
    <xsl:copy-of select="//*"/>
    </xsl:copy>
    ...
    ich hoffe dich richtig verstanden zu haben...

    Comment


    • #3
      Hallo Sano

      Sorry für die späte Rückmeldung, kamm einfach nicht dazu!

      Probieren gehr über Studieren: Habe die 2-te Variante ausprobiert
      und sie funktioniert.

      Danke
      durdi

      Comment

      Working...
      X