在HTML文件中包含XML内联

时间:2009-12-07 21:33:05

标签: javascript internet-explorer dom

我正在尝试在HTML文件中包含一些(有效的)静态XML数据,然后使用JavaScript解析它。下面的测试用例在Firefox,Opera和Chrome中运行良好(我得到了预期的节点和深度列表),但在IE8中失败(所有节点都在相同的深度,并且结束标记包含在节点列表中)。 / p>

问题:如何修复代码在IE中按预期工作?

代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Odd Ie behavior - test case</title>
        <script type="text/javascript">

function p(text) {
    var out = document.getElementById("output");
    out.innerHTML += text + "<br>";
}

function walkDom(node, depth) {
    var i, il;
    if (node.nodeType === 1) {
        p("Node( " + depth + "): " + node.nodeName);
        if (node.childNodes && node.childNodes.length > 0) {
            for (i = 0; i < node.childNodes.length; i += 1) {
                il = node.childNodes[i];
                walkDom(il, depth + 1);
            }
        }
    }
}

function init() {
    var data = document.getElementById("data");
    walkDom(data, 0);
}
        </script>
    </head>
    <body onload="init()" id="body">
        <div id="data" style="display: none"><data><ele><foo>Foo</foo><bar></bar></ele></data></div>
        <div id="output"></div>
    </body>
</html>

“正确”输出

Node( 0): DIV
Node( 1): DATA
Node( 2): ELE
Node( 3): FOO
Node( 3): BAR

IE输出

Node( 0): DIV
Node( 1): DATA
Node( 1): ELE
Node( 1): FOO
Node( 1): /FOO
Node( 1): BAR
Node( 1): /BAR
Node( 1): /ELE
Node( 1): /DATA

1 个答案:

答案 0 :(得分:3)

看起来IE不会将您的XML节点视为DOM节点,而Firefox,Chrome和Opera则会这样做。

可以说,IE行为是正确的,因为这些节点不是HTML DOM的一部分。

要回答您的问题 - 此行为取决于浏览器编写者如何实施DOM导航,您无法“强制”浏览器更改它。

IE在HTML表单中有自己的嵌入式XML概念,称为data islands,也许你可以将它用于IE。