Announcement

Collapse
No announcement yet.

mehrere Ausgabedateien erzeugen

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

  • #16
    Der folgende Ansatz ist zumindest strukturierter:

    Code:
    <?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" version="1.0" encoding="ISO-8859-1" indent="yes"/>
      <xsl:key name="blumen_gruppe" match="blumen" use="info2"/>
    
      <xsl:template match="root">
        <root>
          <xsl:apply-templates
            select="blumen[generate-id()=generate-id(key('blumen_gruppe',info2)[1])]"/>
        </root>
      </xsl:template>
    
      <xsl:template match="blumen">
        <xsl:call-template name="copy_nodes">
          <xsl:with-param name="blume" select="info2"/>
        </xsl:call-template>
      </xsl:template>
    
      <xsl:template name="copy_nodes">
        <xsl:param name="blume"/>
        <xsl:element name="{$blume}">
          <xsl:copy-of select="//blumen[.//info2=$blume]"/>
        </xsl:element>
      </xsl:template>
    
    </xsl:stylesheet>

    Comment


    • #17
      Vielen Dank für die Hilfe!!! Es funktioniert!! Die Gruppierung klappt.

      Mit <exsl:document href="{$blume}.xml" encoding="ISO-8859-1" standalone="yes" indent="yes"> erzeuge ich nun mehrere Dateien, die den jeweiligen Inhalt haben.

      Nun das nächste Problem: in den erzeugten Dateinamen treten z.T. Umlaute auf, die dann nicht als Umlaute ausgegeben werden, sondern z.B. Ö als %C3%96.
      Wie könnte man dieses Problem lösen?

      Comment


      • #18
        Pfad- und Dateienamen werden in URI-Notation gebracht. Die Ausgabe obliegt dem Prozessor. Ich kenne keinen Weg, um dieses (sinnvolle) Verhalten zu ändern, außer Umlaute zu vermeiden.

        Comment


        • #19
          Ich hatte mich geirrt. Die Umlaute werden garnicht ausgegeben. Also nicht z.B. Ö als %C3%96, sondern einfach weggelassen. Wahrscheinlich kann der Prozessor (xmlstarlet) mit
          Code:
          &ouml;
          usw. nichts anfangen. Aber wenn man da nicht eingreifen kann, muß ich entweder damit leben oder mir etwas anderes einfallen lassen.

          Ich habe die ganze Sache bis jetzt immer nur mit einer Testdatei probiert, weil die Originaldatei so große ist. Die richtige Datei ist über 500 MB groß ist. Bei der Transformation dieser Datei kommen mir nun Out of Memory Fehler.

          Kann man dieses Problem irgendwie beheben?

          Comment


          • #20
            Wo kommen denn diese Entity-Referenzen vor? XML kennt ja per default nur fünf Entitys: amp, apos, gt, lt und quot.

            Wenn also &ouml; im XML- oder XSL-Inhalt steht, dann ist eine eigene Deklaration (DOCTYPE-Erweiterung) erforderlich:
            <!ENTITY ouml "&#xF6;">
            (alternativ dezimal 246 statt hexadezimal xF6, aber das schluckt das Forumsskript immer weg -- vielleicht könnten die Admins dieses Verhalten mal korrigieren).

            Comment


            • #21
              alternativ dezimal 246 statt hexadezimal xF6, aber das schluckt das Forumsskript immer weg
              In meinem DOCTYPE steht die Entity, aber eben dezimal 246. Das erklärt natürlich auch warum die Umlaute nicht ausgegeben werden. Ich werde es mal mit hexadezimal probieren.

              Gibt es Ratschläge zu meinem anderen Problem:
              Ich habe die ganze Sache bis jetzt immer nur mit einer Testdatei probiert, weil die Originaldatei so große ist. Die richtige Datei ist über 500 MB groß ist. Bei der Transformation dieser Datei kommen mir nun Out of Memory Fehler.

              Kann man dieses Problem irgendwie beheben?

              Comment


              • #22
                Es handelt sich doch um dieselbe numerische Kodierung des Zeichens, nur anders ausgedrückt (dez vs. hex). Der Hinweis bezog sich auf dieses Forum, welches in Postings die dezimale Kodierung direkt auflöst und genau das sollte ja auch bei der Transformation passieren. Im Forum ist es aber etwas unpassend, weil man so keine dezimalen numerischen Zeichenreferenzen direkt posten kann (außer vielleicht als Quellcode). Seltsamerweise kann man aber &#xA0; direkt posten, das #160-Äquivalent leider nicht.

                Das Problem mit der Dateigröße hängt wohl mit dem eingesetzten Prozessor und dem verfügbaren Speicher zusammen. Hier hilft wohl nur Ausprobieren.

                Comment


                • #23
                  Originally posted by nipu View Post
                  Vielen Dank für die Hilfe!!! Es funktioniert!! Die Gruppierung klappt.

                  Mit <exsl:document href="{$blume}.xml" encoding="ISO-8859-1" standalone="yes" indent="yes"> erzeuge ich nun mehrere Dateien, die den jeweiligen Inhalt haben.

                  Nun das nächste Problem: in den erzeugten Dateinamen treten z.T. Umlaute auf, die dann nicht als Umlaute ausgegeben werden, sondern z.B. Ö als %C3%96.
                  Wie könnte man dieses Problem lösen?
                  Das Problem dürfte sich durch ISO-8859-15, anstelle von ISO-8859-1 lösen. So war es jedenfalls bei mir, stand gerade vor dem gleichen Problem.

                  Comment

                  Working...
                  X