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

MSIE: Append XML Element to HTML Element

本文关键字:元素 HTML MSIE XML      更新时间:2023-09-26

我正在使用XMLHttpRequest从服务器检索XML,我想将它附加到页面上现有的HTML节点。它是格式良好的HTML,我在响应中的XML根元素中添加了xmlns='http://www.w3.org/1999/xhtml':对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) 创建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) 将elemHTML附加到需要的位置:

ele.appendChild(eleHTML);

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