#1 22.03.10 01:26
javascript & XML
приложение получает xml файл и обрабатывает его:
Код::
function tagSearch(element, element_name, attr_name, attr_value){
var elements = element.getElementsByTagName(element_name);
if(elements)
for(var i = 0; i < elements.length; i++){
if(elements[i].getAttribute(attr_name) == attr_value){
return elements[i].textContent;
}
}
}где:
element-документ xml,
element_name - имя элемента, который надо найти,
attr_name - имя атрибута, который должен быть в элементе element_name и иметь значение attr_value
и фокс и ие находят нужный элемент, но только фокс возвращает текст, содержащийся в CDATA.
структура xml документа:
Код::
<info>
<title name="main">
<text>
<![CDATA[
некий хтмл форматированный текст
]]>
</text>
</title>
</info>элементов <title> несколько и все с разными значениями атрибута name
Как добиться, чтобы ие тоже возвращал нужный текст? Есть какой-нибудь общий способ для всех браузеров?
Может поменять алгоритм?
зы: гуглить не отправлять, ибо "наяндексился" до ус@ачки. очень нужен грамотный совет
зы2: есть мысль, что кодировка xml виновата, сейчас стоит виндоус-1251
Исправлено ЙожжЫк (22.03.10 01:30)
Offline
#2 22.03.10 17:57
Re: javascript & XML
Во-первых, свойство testContent стоит заменить на innerHTML. Во-вторых, советую обратить внимение на js-framework'и и xpath. Например вот так: http://www.ibm.com/developerworks/xml/l … athjquery/.
Offline
#3 23.03.10 19:51
Re: javascript & XML
xpath классная оказывается штука.. с фоксоподобными разобрался. а как быть с ие? вот например как я получаю xml файл и обращаюсь к нему:
для фф:
Код::
if(window.XMLHttpRequest){
xml=new window.XMLHttpRequest();
xml.onreadystatechange = function() {
if (xml.readyState == 4 && (xml.status == 200 || xml.status == 0)){
var res = xml.responseXML.evaluate(xpathExp, xml.responseXML, null, 2, null);
XMLDoc = xml.responseXML;
document.getElementById("info").innerHTML = res.stringValue;
}
}
xml.open("GET", file_name);
xml.send("");
}для ие:
Код::
if(window.ActiveXObject){
xml=new ActiveXObject("Microsoft.XMLHTTP");
xml.onreadystatechange = function() {
if (xml.readyState == 4){
var res =ХХХ.selectNodes(xpathExp);
XMLDocument = xml;
}
}
xml.open("GET", file_name);
xml.send("");
}что должно быть вместо ХХХ? пробовал xml и xml.responseXML
ps в инете везде для ие используют xml.responseXML. может проблема в том, что ие не понимает xml файл? в responseText он показывает содержимое, а responseXML пусто.
Исправлено ЙожжЫк (23.03.10 20:34)
Offline
#4 23.03.10 21:43
Re: javascript & XML
1. Для асинхронных запросов js-фреймворки используй. Курить в сторону jQuery, Prototype и т.д. и т.п.
2. На стороне сервера перед отдачей XML кинь заголовок Content-Type, равный text/xml. IE в данном случае как раз правильно поступает, так как вполне ризонно считает что ты ему plain/text'a навалил.
Offline
#5 23.03.10 22:40
Re: javascript & XML
Сань, попробуй стандартные способы как создания объекта хмлхттприкуест, так и обработки результатов:
примерно так:
Код: JavaScript:
function createRequestObject() { if (window.XMLHttpRequest) { try { return new XMLHttpRequest(); } catch (e){} } else if (window.ActiveXObject) { try { return new ActiveXObject('Msxml2.XMLHTTP'); } catch (e){ try { return new ActiveXObject('Microsoft.XMLHTTP'); } catch (e){} } } return null; }
посылка запроса:
Код: JavaScript:
function get() { if(request.readyState == 4 || request.readyState == 0) { request.open("POST", "/path_to_script_on_the_server", true); request.onreadystatechange = requestFunc; request.send(null); } else { alert("занято"); } }
обработка:
Код: JavaScript:
function requestFunc() { if(request.readyState == 4) { if(request.status == 200) { xmlResp = request.responseXML; xmlDocEl = xmlResp.documentElement; // ну а дальше уже text = xmlDocEl.getElementsByTagName('text');
попробой всё именно в такой последовательности :)
Исправлено (int)~set::Get(); (23.03.10 22:43)
Offline
#7 24.03.10 00:26
Re: javascript & XML
(int)~set::Get();, че то них"ра не пашет в ие. это говно не использует request.status. ие 8 версии еще перехватывает XMLHttpRequest() вместо положенного ActiveXObject и при этом пишет, что отказано в доступе в request.open("POST", "/path_to_script_on_the_server", true); Решается путем перестановок условий. но в итоге - фигня. надо что-то с xml файлом придумать
этот осел меня уже задрал
Исправлено ЙожжЫк (24.03.10 00:27)
Offline
#8 24.03.10 13:26
Re: javascript & XML
вот же самая главная строчка этого треда:
efferson написал(а):
1. Для асинхронных запросов js-фреймворки используй. Курить в сторону jQuery, Prototype и т.д. и т.п.
что ты мозги себе трахаешь?
Offline

