Alexander Ganz: XML Abspecken

Hallo Allerseits,

ich versuche gerade XML Dateien per XSL zu verkleinern.
Das heisst, ich würde gerne überflüssige Einträge aus der XML Datei entfernen.
Beispiel:
<root>
   <bla id="5" irgendwas="toll">
     <keininhalt />
     <wichtigeInfo>Hier ganz wichtig</wichtig>
     <uninteressant />
   </bla>
</root>

Ich möchte also den Tag "keininhalt" und "uninterressant" und das attribut "irgendwas" entfernen.
Herauskommen soll natürlich wohlgeformtes uns schlankes XML :-)
Die Original XML Datei ist natürlich viel verschachtelter und komplexer.
Hat jemand vielleicht einen Denkansatz für mich, wie ich das am einfachsten anstellen kann?

Viele Grüße
Alex

  1. Hallo Alex,

    ich versuche gerade XML Dateien per XSL zu verkleinern.
    Das heisst, ich würde gerne überflüssige Einträge aus der XML Datei entfernen.
    Beispiel:
    <root>
       <bla id="5" irgendwas="toll">
         <keininhalt />
         <wichtigeInfo>Hier ganz wichtig</wichtig>
         <uninteressant />
       </bla>
    </root>

    Was hast du denn versucht und wo *genau* ist denn dein Problem?

    Ich möchte also den Tag "keininhalt" und "uninterressant" und das attribut "irgendwas" entfernen.

    Hat jemand vielleicht einen Denkansatz für mich, wie ich das am einfachsten anstellen kann?

    Die Grundprinzipien dafür stehen alle hier:
    http://selfhtml.teamone.de/xml/darstellung/xsltelemente.htm

    Entscheidend für Dein Problem sind die Elemente xsl:copy und xsl:copy-of, mit denen du Knoten aus dem Quelldokument ins Ergebnisdokument kopieren kannst. handelt es sich bei dem Knoten um einen ganzen Baum (den Du auch ganz kopieren willst), musst du xsl:copy-of verwenden, ansonsten xsl:copy. Für dein konstruiertes Beispiel wäre eine mögliche Lösung:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:template match="root">

    xsl:copyxsl:apply-templates/</xsl:copy>

    </xsl:template>

    <xsl:template match="wichtigeInfo">

    xsl:copy<xsl:value-of select="."/></xsl:copy>

    </xsl:template>

    </xsl:stylesheet>

    Gruß
    Franz

  2. hallo,

    ich versuche gerade XML Dateien per XSL zu verkleinern.
    Ich möchte also den Tag "keininhalt" und "uninterressant" und das attribut "irgendwas" entfernen.
    Herauskommen soll natürlich wohlgeformtes uns schlankes XML :-)
    Die Original XML Datei ist natürlich viel verschachtelter und komplexer.
    Hat jemand vielleicht einen Denkansatz für mich, wie ich das am einfachsten anstellen kann?

    du hast wohl einen editor, (xmlspy, xmetal, homesite, ultraedit) diese können uach datei und orderweit suchen und ersetzen.

    ansonsten:
    ----------- xsl datei ------------
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" />
    <xsl:template match="root">
       xsl:copy
       <xsl:apply-templates select="bla"/>
       </xsl:copy>
    </xsl:template>

    <xsl:template match="bla">
       xsl:copy
             <xsl:copy-of select="@id" />
       <xsl:copy-of select="wichtigeInfo"></xsl:copy-of>
       </xsl:copy>

    </xsl:template>
    </xsl:stylesheet>
    -------------------------------

    als ausdruck produziert z.B. saxon folgendes:

    <?xml version="1.0" encoding="utf-8"?>
    <root>
       <bla id="5">
          <wichtigeInfo>Hier ganz wichtig</wichtigeInfo>
       </bla>
    </root>

    grüße
    thomas

    1. Hallo Thomas,

      wie praktisch, der Autor des Buches, das vor mir liegt, antwortet selbst :-)
      Das hat mir jetzt schon ein ganzes Stück weitergeholfen!
      Mir war die Verschachtelung von copy und copy-of nicht klar.
      Allein mit copy-of, wie ich es bisher hatte, war immer zuviel drin, ich wusste nicht genau, wie ich die Sachen einzeln rausschmeissen bzw. selektieren konnte. Bin auch nicht so ganz fit heute...
      Na ja, Suchen und Ersetzen ist natürlich ne Klasse Funktion, aber das ganze soll automatisch ablaufen, deswegen fällt das für mich flach.

      Danke Dir und auch fjh / Franz!

      Liebe Grüße
      Alex

      1. Hallo Alex,

        wie praktisch, der Autor des Buches, das vor mir liegt, antwortet selbst :-)

        es waren beide autoren die dir geantwortet habe ;-)
        (und natürlich freut es uns, dass du das buch vor dir hast)

        grüße
        thomas

        1. Huhu!

          es waren beide autoren die dir geantwortet habe ;-)
          (und natürlich freut es uns, dass du das buch vor dir hast)

          *Hehe* fjh - hätte ich ja selbst drauf kommen können - steht ja unterm Titel :-)
          Ok, dann mal vielen Dank für alles! Bin immer kräftig am lesen und hab schon viel gelernt!

          Liebe Grüße
          Alex