Официальный сайт студ.городка НГТУ
Программирование и БД » javascript & XML 

#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

#6  24.03.10 00:22

Re: javascript & XML

efferson написал(а):

На стороне сервера перед отдачей XML кинь заголовок

у меня просто файл загружается. нет  скрипта на сервере. есть возможность этот заголовок прописать в файле? типа <?xml version="1.0" Content-Type ="text/xml" encoding="utf-8"?>

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

Программирование и БД » javascript & XML 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.050 сек.
Выполнено 14 запросов.