我的腳本在IE瀏覽器中運行,但Firefox/Chrome瀏覽器(這很奇怪),我有以下XML解析問題。當然,這是一件非常愚蠢的事,但我非常感激。JavaScript 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小時**
右鍵所以問我似乎對答案無意中發現後一分鐘...
的textContent
這似乎是Firefox和Chrome中用於文本數據的屬性(我假設是因爲它被封裝在CDATA標籤中)。但是,將代碼更改爲字段[z] .textContent則會中斷IE。
所以我做了以下內容:
var data = (fields[z].textContent == undefined) ? fields[z].firstChild.nodeValue : fields[z].textContent;
cell.innerHTML = data;
這似乎是工作在這兩個確定。
但我會歡迎任何「適當的」解決方案。
乾杯,
戴夫。
P.S.我得到了與[z] .firstChild.nodeValue以及實體[i] .childNodes [z]相同的響應... – Dave