lernen2007: Zeichenkodierung überschreiben

Hallo,

ich will mit XSL die Zeichenkodierung überschreiben

d.h. in mein XML ist es dann so etwas:

<?xml version="1.0" ?>

das will ich durch denn:

<?xml version="1.0" encoding="UTF-8"?>

ersetzen.

Wie kann ich so etwas mit xsl realisieren?

Gruß

  1. @@lernen2007:

    das will ich durch denn:
    <?xml version="1.0" encoding="UTF-8"?>
    ersetzen.
    Wie kann ich so etwas mit xsl realisieren?

    Siehe [XSLT10 §16]

    Die Angabe der Zeichencodierung ist übrigens nicht erforderlich, wenn diese UTF-8 oder UTF-16 ist. [XML10 §4.3.3]

    Live long and prosper,
    Gunnar

    --
    Flughafen in Tempelhof
    findet jeder Hempel doof.
    1. Hallo,

      es sollte folgende Zeichenkodierung sein. Ich habe vorher falsch geschrieben:

      <?xml version="1.0" encoding="iso-8859-1"?>

      Wie kann ich denn so etwas überschreiben?

      1. @@lernen2007:

        Wie kann ich denn so etwas überschreiben?

        ?? Hast du dir überhaupt die Mühe gamacht, in die eben verlinkte XSLT-Spec zu sehen? Da steht es doch: mit dem 'encoding-Attribut.

        Live long and prosper,
        Gunnar

        --
        Flughafen in Tempelhof
        findet jeder Hempel doof.
        1. Hallo,

          mein xml file sieht aber so aus:

          <?xml version="1.0"?>

          ....

          und ich will das erreichen mit xsl:

          <?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"/>

          .....

          Aber ich bekomme immer folgende Fehlermeldung:

          javax.xml.transform.TransformerException:com.sun.org.apache.xml.internal.utils.
          WrappedRuntimeException:Invalid byte 2 of 3-byte UTF-8 sequence

          1. @@lernen2007:

            mein xml file sieht aber so aus:
            <?xml version="1.0"?>

            Dein Quelldokument ist wirklich in UTF-8 codiert?

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

            Dein XSLT-Stylesheet ist wirklich in ISO 8859-1 codiert?

            <xsl:output method="xml" version="1.0" encoding="iso-8859-1"/>

            Dein Ergebnisdokument soll in ISO 8859-1 codiert sein? Warum eigentlich? Sinnvoll dürfte das nicht sein.

            Aber ich bekomme immer folgende Fehlermeldung:

            javax.xml.transform.TransformerException:com.sun.org.apache.xml.internal.utils.

            WrappedRuntimeException:Invalid byte 2 of 3-byte UTF-8 sequence

            Dann ist wohl die Antwort auf die erste oder zweite Frage „nein“.

            Live long and prosper,
            Gunnar

            --
            Flughafen in Tempelhof
            findet jeder Hempel doof.
  2. Hallo!

    Wie kann ich so etwas mit xsl realisieren?

    In der Regel sollte es ausreichen, wenn Du einfach alle Kinder des Root-Knotens kopierst:

    <?xml version="1.0" encoding="UTF-8"?>  
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
    <xsl:output method="xml" encoding="UTF-8" version="1.0" />  
    <xsl:template match="/">  
      <xsl:copy-of select="node()" />  
    </xsl:template>  
    </xsl:stylesheet>
    

    Dann ist es auch egal, in welcher Kodierung die Originaldatei war, solange sie nur korrekt angegeben wurde.

    Das kopiert Dir allerdings nicht den DOCTYPE und es gibt in XSLT 1.0 keine Möglichkeit, an den DOCTYPE des geladenen Dokuments heranzukommen. Ferner können einige Umkodierungen bei den Textknoten stattfinden. (Entities werden ersetzt, Zeichenreferenzen werden durch die eigentlichen Zeichen ersetzt, ...)

    Die Frage ist: Warum willst Du das überhaupt? Du kannst die XML-Datei doch einfach als ISO-8859-1 gespeichert lassen, das wird Dir jeder mir bekannte XML-Parser trotzdem schlucken, egal, was Du dann damit weiter anstellen willst.

    Viele Grüße,
    Christian