Markus: Ganze XML Struktur an Div übergeben

Guten Abend,

ich habe gerade ein Problem mit einem XML-Response von Ajax.
Es wird in der XML Datei auch ein kompletter HTML-Teil zurückgegeben, der dann in ein div eingefügt werden soll.
Das Problem: Ich schaffe es nicht die gesamte Struktur des XML-Knoten (mit allen "Unterknoten" die durch den HTML Code entstehen) an das DIV zu übergeben.

Beispiel XML-Datei:
<?xml version="1.0" encoding="iso-8859-1"?><response>
<overwritediv divid="contentdiv">
<table border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td>Testbla</td>
    <td><a href="#12345">Test link</a></td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>Testbla</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>
</overwritediv>
</response>

Mein letzer Versuch:
rXML = ajax.responseXML;
overwritedivs = rXML.getElementsByTagName("overwritediv");
for(i=0;i<overwritedivs.length;i++)
{
   document.getElementById(overwritedivs[i].getAttribute("divid")).innerHTML = overwritedivs[i];
}

Vielen Dank! Ich bin wirklich am verzweifeln!

  1. Hi,

    Das Problem: Ich schaffe es nicht die gesamte Struktur des XML-Knoten (mit allen "Unterknoten" die durch den HTML Code entstehen) an das DIV zu übergeben.

    sondern?

    Vielen Dank! Ich bin wirklich am verzweifeln!

    Das erklärt vermutlich, warum Du das Problem nur benannt, nicht aber beschrieben hast. Soweit ich es sehe, ist alles in Ordnung.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah

      Das erklärt vermutlich, warum Du das Problem nur benannt, nicht aber beschrieben hast. Soweit ich es sehe, ist alles in Ordnung.

      Das Problem ist (siehe andere Antwort), dass ich immer als Ergebnis "undefined" erhalte. Gibt es denn keine "vernünftige" Art eine ganze Node-Struktur zu "übertragen"?

      Vielen Dank

  2. Lieber Markus,

    Du weist also einem Element für sein innerHTML einfach das overwritediv zu? Das wird haue geben!

    xyz.innerHTML = overwritedivs[i];

    Meiner Erfahrung nach stimmt hier links mit rechts nicht überein. Links hast Du eine Eigenschaft, der ein String zugewiesen werden müsste, rechts hast Du ein XML-Element.

    Entweder Du nimmst overwritedivs[i].innerHTML (falls es das gibt), oder overwritedivs[i].innerXML (falls es dieses stattdessen gibt), oder Du probierst overwritedivs[i].firstChild.data (das nehme ich).

    document.getElementById(overwritedivs[i].getAttribute("divid")).innerHTML = overwritedivs[i].firstChild.data;

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Guten Abend Felix,

      Lieber Markus,

      Du weist also einem Element für sein innerHTML einfach das overwritediv zu? Das wird haue geben!

      Das stimmt - es war mehr oder weniger aus Verzweiflung. ;)

      Entweder Du nimmst overwritedivs[i].innerHTML (falls es das gibt), oder overwritedivs[i].innerXML (falls es dieses stattdessen gibt), oder Du probierst overwritedivs[i].firstChild.data (das nehme ich).

      document.getElementById(overwritedivs[i].getAttribute("divid")).innerHTML = overwritedivs[i].firstChild.data;

      Leider funktioniert das nicht. Es wird nun lediglich "undefined" ins Div reingeschrieben. innerXML macht ebenfalls das gleiche.

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      Hast du noch einen weiteren Vorschlag?
      Vielen Dank!

      1. Lieber Markus,

        document.getElementById(overwritedivs[i].getAttribute("divid")).innerHTML = overwritedivs[i].firstChild.data;

        Leider funktioniert das nicht. Es wird nun lediglich "undefined" ins Div reingeschrieben. [...]
        Hast du noch einen weiteren Vorschlag?

        overwritedivs[i].data?

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
        1. overwritedivs[i].data?

          Mit overwritedivs[i].data bekomme ich undefined.
          Mit overwritedivs[i].firstChild.data bekomme ich bei Plaintext das richtige raus, bei HTML-Inhalt jedoch auch undefined.

          Vielen Dank & Grüße!

          1. Moin!

            Um das innerHTML zu überschreiben, müßte da nicht zuerst das XML serialisiert, also in Text verwandelt werden?
            [code=javascript]
            var serializer = new XMLSerializer();
            ....innerHTML= serializer.serializeToString(xml);
            [/code]

            -- Skeeve

            1. Liebe(r) Skeeve,

              var serializer = new XMLSerializer();

              ist XMLSerializer in allen Browsern so verfügbar? Anscheinend ist es kein offizieller Standard, auch wenn anscheinend so gut wie alle Browser es unterstützen...

              Liebe Grüße aus Ellwangen,

              Felix Riesterer.

              --
              ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
              1. Moin!

                ist XMLSerializer in allen Browsern so verfügbar?

                Selbst wenn (noch) nicht: Eine Google Suche liefert einige Implementierungen in JavaScript.

                Anscheinend ist es kein offizieller Standard,

                Das mag sein. Da ich nur mit den Mozilla Browsern arbeite, kümmere ich mich selten um Standards ;-) Ich meine, ich hätte die Informationen darüber mal in der Gecko Dokumentation gefunden.

                -- Skeeve

              2. Mahlzeit!

                var serializer = new XMLSerializer();

                Super Idee! Einziges Problem ist, dass er hierbei auch die um schließenden Tags ausgibt: also z.b:
                <overwritediv divid="gbookcomments">Es sind keine Einträge vorhanden.</overwritediv>
                Irgendeine Idee wie ich diese umschließenden Tags wegbekomme bzw. nur den Content innerhalb des overwritediv erhalte?

                Vielen Dank!

                1. Lieber Markus,

                  <overwritediv divid="gbookcomments">Es sind keine Einträge vorhanden.</overwritediv>

                  in etwa so (ungetestet)?

                  myInnerHTML = mySerializedString.replace(/^.*<overwritediv[^>]*>(.+)<\/overwritediv>.*$/i, "$1");

                  Liebe Grüße aus Ellwangen,

                  Felix Riesterer.

                  --
                  ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
                2. Moin!

                  Super Idee! Einziges Problem ist, dass er hierbei auch die um schließenden Tags ausgibt:

                  Dann mußt Du von Deinem XML Response halt nicht das root Element serialisieren, sondern das Kind/die Kinder.

                  z.B. hiermit:

                    
                  /*** serializeChildren *******************************************************/  
                  // will return a serialized (text) version of the children of parentNode  
                   function serializeChildren( parentNode ) {  
                    var innerHTML= '';  
                    var serializer = new XMLSerializer();  
                    var child= parentNode.firstChild;  
                    while (child) {  
                     innerHTML += serializer.serializeToString(child);  
                     child= child.nextSibling;  
                    }  
                    return innerHTML;  
                   }  
                  //  
                  ///////////////////////////////////////////////////////////////////////////////  
                    
                  
                  

                  -- Skeeve