ورود

View Full Version : خواندن از فایل XML



leila_safa
دوشنبه 28 مرداد 1387, 14:28 عصر
سلام.

میشه به من بگین که مشکل این کد کجاست و چرا جواب درست رو نمی ده؟
دکمه اول که باید لیست تمامی state های موجود در فایل XML رو نمایش بده، اما چیزی نمایش نمی ده.
دکمه دوم هم که باید لیست همه state ها در تگ north را نمایش بده اما error می ده از خط 40.

ممنون می شم اگه مشکلش رو بهم بگین.

کد:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Parsing XML Responses with the W3C DOM</title>
<script type="text/javascript">
var xmlHttp;
var requestType = "";
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest();
}
}
function startRequest(requestedList) {
requestType = requestedList;
createXMLHttpRequest();
xmlHttp.onreadystatechange = handleStateChange;
xmlHttp.open("GET", "parseXML.xml", true);
xmlHttp.send(null);
}
function handleStateChange() {
if(xmlHttp.readyState == 4) {
//if(xmlHttp.status == 200) {
if(requestType == "north") {
listNorthStates();
}
else if(requestType == "all") {
listAllStates();
}
//}
}
}
function listNorthStates() {
var xmlDoc = xmlHttp.responseXML;
var northNode = xmlDoc.getElementsByTagName("north")[0];
var out = "Northern States";
var northStates = northNode.getElementsByTagName("state");
outputList("Northern States", northStates);
}
function listAllStates() {
var xmlDoc = xmlHttp.responseXML;
var allStates = xmlDoc.getElementsByTagName("state");
outputList("All States in Document", allStates);
}
function outputList(title, states) {
var out = title;
var currentState = null;
alert(states.length);
for(var i = 0; i < states.length; i++) {
currentState = states[i];
out = out + "\n- " + currentState.childNodes[0].nodeValue;
}
alert(out);
}
</script>
</head>
<body>
<h1>Process XML Document of U.S. States</h1>
<br/><br/>
<form action="#">
<input type="button" value="View All Listed States"
onclick="startRequest('all');"/>
<br/><br/>
<input type="button" value="View All Listed Northern States" onclick="startRequest('north');"/>
</form>
</body>
</html>


اینم محتوای فایل parseXML.xml :


<?xml version="1.0" encoding="utf-8" ?>
- <states>
- <north>
<state>Minnesota</state>
<state>Iowa</state>
<state>North Dakota</state>
</north>
- <south>
<state>Texas</state>
<state>Oklahoma</state>
<state>Louisiana</state>
</south>
- <east>
<state>New York</state>
<state>North Carolina</state>
<state>Massachusetts</state>
</east>
- <west>
<state>California</state>
<state>Oregon</state>
<state>Nevada</state>
</west>
</states>

tabib_m
دوشنبه 28 مرداد 1387, 18:35 عصر
سلام
جستجوی زیادی کردم تا مشکل رو پیدا کنم... ولی متأسفانه فقط مشکل رو فهمیدم از کجا آب میخوره و راه حل رو پیدا نکردم...
کدت با فایرفاکس هیچ مشکلی نداره...
مشکل توی اینترنت اکسپلورر مربوط به بخش xmlHttp.responseXML میشه... نتیجه خالیه... اگه responseText استفاده کنی، محتوای فایل به درستی لود میشه، ولی به جاش دیگه نمیتونی از getElementByTagName استفاده کنی و مجبوری با رشته ها سر و کله بزنی و ...
اینکه چرا IE با responseXML مشکل داره، نمیدونم والا!!! (امیدوارم هر چی زودتر از صحنه ی روزگار محو شه!!!)

اگه مشکل رو حل کردی، ممنون میشم اینجا مطرح کنی

موفق باشید

leila_safa
دوشنبه 28 مرداد 1387, 22:20 عصر
دقیقا منم به همین نتیجه رسیده بودم که توی northnode مقدار null ریخته می شه. اما نمی دونم چرا.

خودم 4 ساعت روش کار کردم اما بازم حل نشد.