Tom2 (der authentifizierte): XML-String zu DOM-Node?

Hallo Leute

Ich versuche per JavaScript Daten aus einer XML-Datei in die aktuelle Webseite einzufügen. Die XML-Datei enhält ein Element, welches in einer CDATA-Section HTML-Code enthalten kann. Mein Problem ist nun, dass dieser HTML-Code im Browser nicht als solchen dargestellt wird, wohl weil es auch als CDATA-Section ins HTML kommt oder weil die Sonderzeichen maskiert werden. Hier ein Beispiel:

XML-Node:
<description><![CDATA[
 Hier <i>darf</i> <b>HTML-Code</b> stehen.
]]></description>

JavaScript:
oHtml  = document.getElementsByTagName('div')[0];
oDescr = oXml.getElementsByTagName('description')[0];
oHtml.appendChild(oDescr.cloneNode(true));

funktioniert ebenso wenig wie:

oHtml  = document.getElementsByTagName('div')[0];
oDescr = oXml.getElementsByTagName('description')[0].firstChild;
while (oDescr != null) {
  oHtml.appendChild(oDescr.cloneNode(true));
  oDescr = oDescr.nextSibling;
}

Weiss jemand Rat? Ich sehe im Browser immer den HTML-Code und nicht die richtig formatierte Beschreibung.

Gruss & Dank

Tom2

  1. hi,

    Die XML-Datei enhält ein Element, welches in einer CDATA-Section HTML-Code enthalten kann. Mein Problem ist nun, dass dieser HTML-Code im Browser nicht als solchen dargestellt wird, wohl weil es auch als CDATA-Section ins HTML kommt oder weil die Sonderzeichen maskiert werden.

    Warum verwendest du denn CDATA? Ist das ein "Muss" seitens der liefernden Applikation, oder liegt sonst irgendein Zwang vor?

    Wenn du ordentliches XHTML vorliegen hast (?), dann könntest du das doch auch gleich ins XML "einbauen".

    <description>Hier <i>darf</i> <b>HTML-Code</b> stehen.</description>

    Weiss jemand Rat? Ich sehe im Browser immer den HTML-Code und nicht die richtig formatierte Beschreibung.

    Dein CDATA-Abschnitt ist nichts weiter als reiner Text. Den kannst du m.E. klonen wie du lustig bist, der bleibt Text.
    Den könntest du also höchstens über .innerHTML irgendwo ins Dokument einfügen und dabei als HTML interpretieren lassen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hi wahsaga

      Warum verwendest du denn CDATA? Ist das ein "Muss" seitens der liefernden Applikation, oder liegt sonst irgendein Zwang vor?

      Ja, das entspricht dem XML-Standard, der wohl HTML-frei gehalten werden will. Das Format ist RSS 2.0.

      Wenn du ordentliches XHTML vorliegen hast (?), dann könntest du das doch auch gleich ins XML "einbauen".

      Ich verstehe nicht ganz was du meinst. Ich bin mir ziemlich sicher, dass der HTML-Code in meinem zweiten Versuch so im HTML-File landet:
      <p>Hier &lt;i&gt;darf&lt;/i&gt; &lt;b&gt;HTML-Code&lt;/b&gt; stehen.</p>

      Im ersten Beispiel muss der HTML-Code, welcher letztendlich angezeigt wird so aussehen:

      <p><[!CDATA[Hier <i>darf</i> <b>HTML-Code</b> stehen.]]></p>

      Dein CDATA-Abschnitt ist nichts weiter als reiner Text. Den kannst du m.E. klonen wie du lustig bist, der bleibt Text.

      Das stimmt, aber beim Anfügen an das Dokument werden die Sonderzeichen anscheinend codiert.

      Den könntest du also höchstens über .innerHTML irgendwo ins Dokument einfügen und dabei als HTML interpretieren lassen.

      Das kennt mein Safari nach SelfHTML leider nicht. Gibt es noch eine andere möglichkeit?

      1. hi,

        Ich verstehe nicht ganz was du meinst. Ich bin mir ziemlich sicher, dass der HTML-Code in meinem zweiten Versuch so im HTML-File landet:
        <p>Hier &lt;i&gt;darf&lt;/i&gt; &lt;b&gt;HTML-Code&lt;/b&gt; stehen.</p>

        Du "bist dir sicher" heißt, du hast es wie kontrolliert?

        Dein CDATA-Abschnitt ist nichts weiter als reiner Text. Den kannst du m.E. klonen wie du lustig bist, der bleibt Text.

        Das stimmt, aber beim Anfügen an das Dokument werden die Sonderzeichen anscheinend codiert.

        Woraus schließt du das?
        In einem reinen Textknoten sind <, > und & keine Sonderzeichen - wenn du also einen Text klonst, kommt dabei ein Text heraus, und wenn du den ins Dokument einhängst, wird ein Textknoten eingehängt.
        Darin sind die "Sonderzeichen" keine Sonderzeichen, sondern normale - also werden sie auch als solche angezeigt.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hi

          Du "bist dir sicher" heißt, du hast es wie kontrolliert?

          Ich hab mir die data-Eigenschaft aus dem Div-Element ausgeben lassen. Ich kann mich nicht 100%-ig daran erinnern, dass die Zeichen wirklich so kodiert waren, aber wären es korrekte Kind-Elemente gewesen, dann wären sie ja nicht in der data-Eigenschaft, oder?

          Dein CDATA-Abschnitt ist nichts weiter als reiner Text. Den kannst du m.E. klonen wie du lustig bist, der bleibt Text.

          Das stimmt, aber beim Anfügen an das Dokument werden die Sonderzeichen anscheinend codiert.

          Woraus schließt du das?

          Weil man in einem Browser ein "<strong>" normalerweise nicht sieht, weil es als Tag erkannt wird.

          In einem reinen Textknoten sind <, > und & keine Sonderzeichen - wenn du also einen Text klonst, kommt dabei ein Text heraus, und wenn du den ins Dokument einhängst, wird ein Textknoten eingehängt.

          Sorry, aber das stimmt AFAIK nicht: <, > und & sind in XML immer Sonderzeichen solange sie nicht in diesen Sonder-Sektionen stehen. Ansonsten hätte ich die Probleme ja nicht weil dann die Tags korrekt im Code landen würden.

          Darin sind die "Sonderzeichen" keine Sonderzeichen, sondern normale - also werden sie auch als solche angezeigt.

          Ich glaube eher, dass die Sonderzeichen durch die createTextNode()-Methode codiert werden.

          Gruss Tom2