0

我的 XML 解析存在以下问题,我的脚本在 IE 中有效,但在 Firefox/Chrome 中无效(这很奇怪)。当然,我正在做的事情真的很愚蠢,但非常感谢任何帮助。

以下 JavaScript 函数:

this.displayData = function(xml)
{
    var table = document.createElement("table"); // table for results
    table.border=0;
    table.width="100%";
    table.classname="requestList";

    var container = document.getElementById('mainright');

    if (container.hasChildNodes())
    {
        while(container.childNodes.length >= 1)
            container.removeChild(container.firstChild);
    }

    container.appendChild(table);

    var entities = xml.getElementsByTagName("entity");

    for (var i=0; i<entities.length; ++i)
    {
        var entity = entities[i];
        var row = table.insertRow(table.getElementsByTagName("tr").length);
        var fields = entity.getElementsByTagName("field");

        for (var z=0; z<fields.length; ++z)
        {
            var cell = row.insertCell(z);
            cell.innerHTML = "("+fields[z].childNodes[0].nodeValue+")";
        }
    }
}

被称为 xmlhttp 回调,并且 XML 似乎有效。XML 输出示例:

<data-list>
<entity entity="">
<field field="requestid">
<![CDATA[ 1 ]]>
</field>
<field field="customer">
<![CDATA[ 1 ]]>
</field>
<field field="assignteam">
<![CDATA[ 0 ]]>
</field>
<field field="assignuser">
<![CDATA[ admin ]]>
</field>
<field field="class">
<![CDATA[ 1 ]]>
</field>
<field field="openeddt">
<![CDATA[ 2012-06-11 19:39:26 ]]>
</field>
<field field="status">
<![CDATA[ 1 ]]>
</field>
</entity>
<entity entity="">
<field field="requestid">
<![CDATA[ 2 ]]>
</field>
<field field="customer">
<![CDATA[ 1 ]]>
</field>
<field field="assignteam">
<![CDATA[ 0 ]]>
</field>
<field field="assignuser">
<![CDATA[ admin ]]>
</field>
<field field="class">
<![CDATA[ 1 ]]>
</field>
<field field="openeddt">
<![CDATA[ 2012-06-11 19:40:02 ]]>
</field>
<field field="status">
<![CDATA[ 1 ]]>
</field>
</entity>
</data-list>

在 IE 中,当我发出请求时,它会在新创建的表中显示数据,每个实体一行,每个字段一列。

然而,在 Firefox 和 Chrome 中,请求被调用正常并且不会产生错误,但空字符串作为 nodeValues 返回,例如,我得到的只是 () 在每个(正确数量的)行和列中。

我敢肯定我真的很愚蠢。非常感谢任何帮助。

干杯,

戴夫。

** 回答我希望,但我无法再 7 小时回答我自己的问题 **

问完一分钟后,我似乎偶然发现了答案……

文本内容

这似乎是 Firefox 和 Chrome 中用于文本数据的属性(我假设是因为它包含在 CDATA 标记中)。但是,将代码更改为 fields[z].textContent 会破坏 IE。

所以我做了以下事情:

var data = (fields[z].textContent == undefined) ? fields[z].firstChild.nodeValue : fields[z].textContent;
cell.innerHTML = data;

这似乎在两者中都可以正常工作。

但我欢迎任何“适当的”解决方案。

干杯,

戴夫。

4

1 回答 1

0

这被证明是一个标题问题 - 愚蠢的是,我没有将 XML 生成中的输出标题设置为 text/xml。虽然 IE 不关心 FF 而 Chrome 关心。

在 PHP 中设置 Content-type 标头解决了它。

于 2013-03-10T00:54:10.503 回答