Steffen: edit xml file with xsl

Hallo,

ich muss eine serie von xml dokumenten editieren. Dabei soll jeweils nur eine bestimmte Stelle editiert werden (attribute wert). Wie geht man am besten hierbei vor um es möglichst effizient zu gestalten. Das aufrufen der verschiedenen Dokumente ist kein Problem, mir geht es nur darum, wie man am besten das stylesheet schreibt fuer ein Dokument.

Gruss, Steffen

  1. Hallo,

    ich muss eine serie von xml dokumenten editieren. Dabei soll jeweils nur eine bestimmte Stelle editiert werden (attribute wert). Wie geht man am besten hierbei vor um es möglichst effizient zu gestalten. Das aufrufen der verschiedenen Dokumente ist kein Problem, mir geht es nur darum, wie man am besten das stylesheet schreibt fuer ein Dokument.

    Leider ist deine Problembeschreibung/Fragestellung völlig unzureichend um dir auch nur im Ansatz etwas "Handfestes" sagen zu können.

    Grüße
    Thomas

    1. Hallo Thomas,

      dann versuche ich es noch einmal ;-) Mir liegen eine xml Dateien vor (XML Dateien enthalten einen Verweis auf DTD files).

      Diese Dateien haben unterschiedlichen Inhalt aber grundstzlich den gleichen Aufbau. Nun muss ich in einer Art Batch zwei Attribute neu schreiben bzw. ändern.

      Beispiel das Attribute /aufsatz/artikel/@datum hat den wert 2008-01-01, soll aber jetzt fue all dateien, die diese Achse haben auf 2008-02-02 gesetzt werden, der Rest der xml Datei soll aber identisch wie im Original verbleiben.

      Hoffe, es ist etwas verstaendlicher jetzt.

      Gruss, St.

      1. Hallo,

        dann versuche ich es noch einmal ;-) Mir liegen eine xml Dateien vor (XML Dateien enthalten einen Verweis auf DTD files).

        Diese Dateien haben unterschiedlichen Inhalt aber grundstzlich den gleichen Aufbau. Nun muss ich in einer Art Batch zwei Attribute neu schreiben bzw. ändern.

        Beispiel das Attribute /aufsatz/artikel/@datum hat den wert 2008-01-01, soll aber jetzt fue all dateien, die diese Achse haben auf 2008-02-02 gesetzt werden, der Rest der xml Datei soll aber identisch wie im Original verbleiben.

        Hoffe, es ist etwas verstaendlicher jetzt.

        Ja, jetzt ist es verständlicher (das Problem war das Wort "editieren").

        Du hast ziemlich viele Möglichkeiten, angefangen von der Bearbeitung der XMLs mit Hilfe von XSLT bis hinzu recht "einfachen" automatisierten Ablauf.

        Ob du jetzt mit Java (C# oder was auch immer) ein keines Programm schreibst, dem du das XML und das XSLT übergibts und das dir dann das geänderte XML als neue Datei ausspuckt oder du es etwas mehr "hard core" machst und mit DOM das XML einliest und manipulierst, ist egal.

        Wie du nun das ganze realisiert, ist nur eine Frage deiner Kentnisse. Du kannst ja genau so eine ausführbare JAR-Datei erstellen und dem z.B. den Ersatztext als Paramter mitgeben, als auch eine EXE. Du kannst auch "übertreiben" und eine grafische Oberfläche dafür schreiben.

        Du kannst aber den Programmieraufwand, wenn du das ganze mit XSLT machst  reduzieren, da du
        a) auf Änderungen mit und im XSLT schneller reagieren kannst, als wenn du dafür ein Programm ändern musst
        b) auf Tools wie Saxon zurückgreifen und die XML/XSLT --> XML Transformation ihm überlassen kannst. (und eine kleine .bat-Datei für das Aufrufen von Saxon ist schnell geschrieben (eine Zeile).

        Hoffe das hilft als Ideen "input"

        Grüße
        Thomas

        1. Hallo Thomas,

          als "Backend" habe ich das cocoon servlet unter apache tomcat zur verfuegung. Die notwendigen dateien liegen mir in for einer xml datei vor, dich ich ueber den cocoon directory generator erstelle. Jetzt muesste ich nur noch eben den weg finden, die dateien zu "editieren". cocoon bringt auch ein write:source transformer mit, der auch einzelne knoten in einer xml datei ersetzen loeschen oder ueberschreiben kann, allerdings soll der etwas buggy sein. Mir ging es nun eher darum, ob man ein relative kurzes stylesheet schreiben kann (wenn ja wie sollte die grobe struktur aussehen), dass die original xml parst und als ergebnis ich die neue datei erhalte. Ich wuesste z.B. nicht, wie ich die dtd angaben in die zieldatei bekomme. Den script (exe, bat oder sh hier unter linux) weg hatte ich eigentlich verworfen, da die liste der zu aendernden xml datein auch von deren inhalt abhaengt und diese liste der dateien mir als xml vorliegt.

          Gruss, Steffen

          1. Hallo,

            als "Backend" habe ich das cocoon servlet unter apache tomcat zur verfuegung. [...]

            Und das sagst du jetzt??? Großartig. Sonst noch etwas dermaßen unwichtiges[tm]?
            Verstehtst du warum ich schrieb: "Leider ist deine Problembeschreibung/Fragestellung völlig unzureichend um dir auch nur im Ansatz etwas "Handfestes" sagen zu können."?!?
            http://forum.de.selfhtml.org/hilfe/charta.htm#tipps-fuer-fragende

            [...] Mir ging es nun eher darum, ob man ein relative kurzes stylesheet schreiben kann (wenn ja wie sollte die grobe struktur aussehen), dass die original xml parst und als ergebnis ich die neue datei erhalte.

            Ja, kann man.
            Grobstruktur:
            templates für die elemente, die nicht geändert werden kannst du in einem einzigen abhandeln z.B.:

              
            <xsl:template match="*[not(local-name() = 'Element')]">  
             <xsl:copy>  
              <xsl:for-each select="@*">  
               <xsl:copy />  
              </xsl:for-each>  
              <xsl:apply-templates />  
             </xsl:copy>  
            </xsl:template>  
            
            

            Dann brauchst du ein Template für das element das geändert werden soll:

            <xsl:template match="Element">  
             <Element>  
              <xsl:value-of select="$AEnderung"/>  
             </Element>  
            </xsl:template>
            

            $AEnderung ist ein globaler Paramter:
            <xsl:param name="AEnderung" /> den du beim Anstoßen der Transformation befüllst.

            Ich wuesste z.B. nicht, wie ich die dtd angaben in die zieldatei bekomme.

            http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#output

            Den script (exe, bat oder sh hier unter linux) weg hatte ich eigentlich verworfen,

            Jaja, Hauptsache du hast es vorher gesagt ... "Schildere, was Du bisher zur Lösung des Problems unternommen hast. Es wird Dir ja wenig helfen, wenn Du Tipps bekommst, die Du bereits selbst ausprobiert hast..." *

            Grüße
            Thomas

            PS: *) ja, ich bin noch immer "ungehalten", weil wir uns viel Zeit hätten sparen können, wenn dein erstes Posting gleich so wie das letze ausgesehen hätte. (eigentlich heisst das, ich hasse es wenn andere meine Zeit verschwenden)

            1. Mea culpa und danke!