Полезная информация

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.

№115-11-2005 18:04:06

Corvus
Участник
 
Группа: Members
Зарегистрирован: 15-11-2005
Сообщений: 3

XMLHTTPRequest в IE и Mozilla

Граждане! Может кто сталкивался с такой лажей. В IE следующий XML:

Выделить код

Код:

<xml version="1.0" encoding="UTF-8" standalone="yes">
<events>
  <event>
    <descr>Test event 1</descr>
    <author>corvus</author>
  </event>
  <event>
    <descr>Test event 2</descr>
    <author>corvus</author>
  </event>
</events>
</xml>

при помощи XMLHttpRequest грузится нормально (т.е.

Выделить код

Код:

request.responseXML.documentElement.getElementsByTagName("events")[0].childNodes.length

дает значение 2, и в дальнейшем в цикле все нормально парсится). В FF же childNodes.length = 3 (!!!) и есессно парсинг обламывается. Вот кусок кода, который я использую:

Выделить код

Код:

xmlDocDay = req_day.responseXML.documentElement;
alert(req_day.responseText); // чисто для отладки
d_rootobj=xmlDocDay.getElementsByTagName("events")[0];	
s = "<table width='100%' border=0>";
alert(d_rootobj.childNodes.length); // вот тут в IE - 2, а в FF - 3
for (i=0;i<d_rootobj.childNodes.length;i++)
{			 
  c_event = d_rootobj.getElementsByTagName("event")[i];
  s += "<tr><td>";
  s += c_event.getElementsByTagName("descr")[0].firstChild.nodeValue;
  s += "</td><td>";
  s += c_event.getElementsByTagName("author")[0].firstChild.nodeValue;
  s += "</td></tr>";
}

Отсутствует

 

№216-11-2005 06:14:03

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: XMLHTTPRequest в IE и Mozilla

Corvus пишет

...дает значение 2, и в дальнейшем в цикле все нормально парсится). В FF же childNodes.length = 3 (!!!)...

У меня childNodes.length для указанного xml дает значение 5 :) Только это не баг.
Простецкий код

Выделить код

Код:

var ch = request.responseXML.documentElement.getElementsByTagName("events")[0].childNodes;
for (i in ch)
    alert (ch [i]. nodeName);

показывает наличие текстовых узлов. У меня:

Выделить код

Код:

#text
event
#text
event
#text

...и есессно парсинг обламывается...

Мда... Парсер, конечно, маленько кривоват. Если ему мешают текстовые узлы в документе, их можно удалить из xml - вот так:

Выделить код

Код:

<xml version="1.0" encoding="UTF-8" standalone="yes">
<events>
    <event>
    <descr>Test event 1</descr>
    <author>corvus</author>
  </event><event>
    <descr>Test event 2</descr>
    <author>corvus</author>
  </event></events>
</xml>

Или исправить парсер, чтобы текстовые узлы ему не мешали. Вот так:

Выделить код

Код:

...
var events = d_rootobj. getElementsByTagName ("event");
for (i=0;i<events.length;i++)
{             
  c_event = events[i];
...

Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№316-11-2005 11:34:38

Corvus
Участник
 
Группа: Members
Зарегистрирован: 15-11-2005
Сообщений: 3

Re: XMLHTTPRequest в IE и Mozilla

У меня childNodes.length для указанного xml дает значение 5 smile Только это не баг.

А я и не говорил, что это баг :) Я назвал это лажей, причем не уточнил, чей именно :)

Мда... Парсер, конечно, маленько кривоват.

Угу. Кто ж спорит :) Я ж так, в порядке эксперимента его набросал.

Если ему мешают текстовые узлы в документе, их можно удалить из xml - вот так:

Проблема в том, что этот XML генерируется PHP-скриптом. Видать где-то я там вставил лишние символы.

Или исправить парсер, чтобы текстовые узлы ему не мешали. Вот так:

Cool! Помогло! Спасибо!

Отредактировано Corvus (16-11-2005 11:38:43)

Отсутствует

 

№418-11-2005 00:11:53

SOb
Участник
 
Группа: Members
Зарегистрирован: 26-03-2005
Сообщений: 93

Re: XMLHTTPRequest в IE и Mozilla

Как вариант - использовать XPath для выбора значений (google->XPath и)

Отсутствует

 

№518-11-2005 05:25:32

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: XMLHTTPRequest в IE и Mozilla

SOb пишет

Как вариант - использовать XPath для выбора значений (google->XPath и)

А в IE/Opera XPath работает ? Я пробовал "скормить" им пример, работающий в FF - ноль эмоций.


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

№618-11-2005 11:25:52

Al_H
Away
 
Группа: Members
Откуда: SPb
Зарегистрирован: 10-06-2005
Сообщений: 5508

Re: XMLHTTPRequest в IE и Mozilla

В IE не работает

Отсутствует

 

№718-11-2005 16:00:26

Anton
Участник
 
Группа: Extensions
Откуда: от верблюда
Зарегистрирован: 14-12-2004
Сообщений: 3057
Веб-сайт

Re: XMLHTTPRequest в IE и Mozilla

Как вариант, можно xslt использовать. Я, правда, не силен... Что-то вроде этого:

Выделить код

Код:

<?xml-stylesheet type="text/xsl" href="xml_style_file.xsl"?>
<xml version="1.0" encoding="UTF-8" standalone="yes">
<events>
  <event>
    <descr>Test event 1</descr>
    <author>corvus</author>
  </event>
  <event>
    <descr>Test event 2</descr>
    <author>corvus</author>
  </event>
</events>
</xml>

+ xml_style_file.xsl:

Выделить код

Код:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xhtml="http://www.w3.org/1999/xhtml">
    <xsl:template match="/">
        <xhtml:html>
            <xhtml:head>
            </xhtml:head>
            <xhtml:body>
                <xhtml:table width="100%" border="0">
                    <xsl:apply-templates/>
                </xhtml:table>
            </xhtml:body>
        </xhtml:html>
    </xsl:template>
    <xsl:template match="//event">
        <xhtml:tr>
            <xsl:apply-templates/>
        </xhtml:tr>
    </xsl:template>
    <xsl:template match="//descr | //author">
        <xhtml:td>
            <xsl:value-of select="."/>
        </xhtml:td>
    </xsl:template>
</xsl:stylesheet>

Будет работать в FF и в IE. Правда, для IE надо убрать префиксы xhtml:

P.S.: Сейчас только заметил, и для FF можно обойтись без xhtml: префиксов. Странно... Раньше не работал без них... %-/

Отредактировано Anton (18-11-2005 16:02:07)


Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]