Announcement

Collapse
No announcement yet.

Interne DTD

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

  • Interne DTD

    Hallo.
    mein Problem ist folgendes: ich habe eine XML-Datei mit einer internen DTD mit Entitäten usw. Ich habe bis jetzt nur mit externen DTD´s gearbeitet. Die Datei soll mit Hilfe von XSLT in eine neue XML-Datei umgewandelt werden.

    <!DOCTYPE test [
    <!ELEMENT test (#PCDATA)>
    ...
    <!ENTITY nbsp "&#160;" >
    ....]>

    Meine Frage wäre, was man im Stylesheet angeben muß, damit die Entitäten usw. mit in neue Dokument übernommen werden. Gibt es da etwas??

    Vielen Dank im voraus.

  • #2
    Ich habe gerade heraus gefunden, wie es funktionieren könnte.

    Code:
    <xsl:text disable-output-escaping="yes">
     <![CDATA[
    <!DOCTYPE test [ 
    <!ELEMENT test (#PCDATA)>
    <!ENTITY nbsp    "*" > .... ]]>
    </xsl:text>
    So sollte es funktionieren. Leider bekommen ich mit meinem XSLT-Prozessor (xmlstarlet) folgendes Ergebnis:
    Code:
    &lt;!DOCTYPE test [ 
    &lt;!ELEMENT test (#PCDATA)&gt;
    &lt;!ENTITY nbsp    "&amp;#160;" &gt; ... ]]>
    Mit Saxon sieht das viel besser aus. Leider kann ich aber Saxon nicht dafür verwenden.

    Hat jemand eine Idee??

    Comment


    • #3
      Weise den DOCTYPE in dieser Form zu:

      <xsl:stylesheet ...>
      <!DOCTYPE xsl:stylesheet [
      ...
      ]>
      ...
      </xsl:stylesheet>
      Zuletzt editiert von Thomas Meinike; 02.06.2008, 18:08.

      Comment


      • #4
        Es geht nicht:

        Ich habe jetzt folgenden Code:
        Code:
        <?xml version="1.0" encoding="ISO-8859-1"?>
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl" exclude-result-prefixes="exsl" >
        <!DOCTYPE xsl:stylesheet[
        <!DOCTYPE test [ 
        <!ELEMENT test (#PCDATA)>
        <!ENTITY nbsp    "&#160;" >]]>
        Mein Parser bringt nur Fehlermeldungen, dass es nicht wohlgeformt wäre.
        Hab ich etwas falsch gemacht??

        Comment


        • #5
          Was soll denn DOCTYPE im DOCTYPE ergeben?

          Comment


          • #6
            Sorry, ist mir garnicht aufgefallen. Werde es gleich ändern und testen.

            Comment


            • #7
              Soll der DOCTYPE ausgegeben werden? (Ich nahm an, dass die Entitys im Stylesheet benötigt werden.) Probiere es so:

              <xsl:text disable-output-escaping="yes">
              &lt;!DOCTYPE test [
              &lt;!ELEMENT test (#PCDATA)&gt;
              &lt;!ENTITY nbsp "&#xA0;"&gt;
              ]&gt;
              </xsl:text>
              Zuletzt editiert von Thomas Meinike; 02.06.2008, 18:09.

              Comment


              • #8
                Ja der Doctype soll ausgegeben werden.
                Dieser Ansatz bringt mir zwar die Klammern, aber der Unicode #160; #161; #162; #163; #164; #165; wird in das Zeichen umgewandelt.
                Das sieht dann so aus:

                Code:
                <!ENTITY nbsp    "*" >
                <!ENTITY iexcl   "¡" >
                <!ENTITY cent    "¢" >
                <!ENTITY pound   "£" >
                <!ENTITY curren  "¤" >
                <!ENTITY yen     "¥" >

                Comment


                • #9
                  Schreibe das &-Zeichen als &amp; (also als &amp;#160; usw.). Habe ich übersehen.

                  Comment


                  • #10
                    DANKE!!! Es hat funktioniert. Es kommt genau so heraus, wie ich es wollte.

                    Comment


                    • #11
                      Kleiner Nachtrag: Statt ]]> muss am Ende des internen DOCTYPE-Bereiches ]> stehen. ]]> schließt dagegen einen CDATA-Abschnitt.

                      Comment

                      Working...
                      X