MSIE:将XML元素附加到HTML元素

时间:2012-02-15 16:44:06

标签: javascript dom

我正在使用XMLHttpRequest从服务器检索XML,我想将它附加到页面上的现有HTML节点。它是格式良好的HTML,我已经将xmlns='http://www.w3.org/1999/xhtml'添加到响应中的XML根元素:适用于Firefox,但IE炸弹“没有支持这样的接口”,我想是因为它有我正在尝试的节点附加类型为“IXMLDOMElement”。

以下是XML响应:

<qstat xmlns='http://www.w3.org/1999/xhtml'>
    <ul>
        <li><b>Cycle number:</b> 6</li>
        <li><b>Error:</b> none</li>
    </ul>
</qstat>

这是Javascript:

var req = new XMLHttpRequest()
req.onreadystatechange = function() {
    if(req.readyState == 4)
    {
        dom = req.responseXML;
        var nodes = dom.firstChild.childNodes;   //Everything under the root node.
        var ele = document.getElementById("qstat");
        for(var i=0; i<nodes.length; i++)
        {
            ele.appendChild(nodes[i]);  // BOMBS HERE.
        }
    }
};

MSIE调试器(MSIE 8)正确地将nodes[0]识别为tagName=ul,甚至有namespaceURI="http://www.w3.org/1999/xhtml",但我想因为它的类型是IXMLDOMElement,所以调用不会工作。

那么有没有办法将nodes中的对象转换为可以附加到元素的相应HTML节点对象?

1 个答案:

答案 0 :(得分:3)

请尝试以下操作:

1)创建一个HTML元素

var factory = document.createElement("div");

2)序列化获取XML元素

var xml = nodes[i].xml || new XMLSerializer().serializeToString(nodes[i]);

3)通过innerHTML渲染xml

factory.innerHTML = xml;

4)从工厂元素获取firstChild,现在是HTML元素

var eleHTML = factory.firstChild;

5)将eleHTML附加到您需要的地方:

ele.appendChild(eleHTML);

提示:您可以重复使用一次创建的工厂DOMHTML元素