Страницы: 1
Граждане! Может кто сталкивался с такой лажей. В 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>"; }
Отсутствует
...дает значение 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);
показывает наличие текстовых узлов. У меня:
...и есессно парсинг обламывается...
Мда... Парсер, конечно, маленько кривоват. Если ему мешают текстовые узлы в документе, их можно удалить из 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ентов на части порвет !!!
Отсутствует
У меня childNodes.length для указанного xml дает значение 5 smile Только это не баг.
А я и не говорил, что это баг Я назвал это лажей, причем не уточнил, чей именно
Мда... Парсер, конечно, маленько кривоват.
Угу. Кто ж спорит Я ж так, в порядке эксперимента его набросал.
Если ему мешают текстовые узлы в документе, их можно удалить из xml - вот так:
Проблема в том, что этот XML генерируется PHP-скриптом. Видать где-то я там вставил лишние символы.
Или исправить парсер, чтобы текстовые узлы ему не мешали. Вот так:
Cool! Помогло! Спасибо!
Отредактировано Corvus (16-11-2005 11:38:43)
Отсутствует
Как вариант - использовать XPath для выбора значений (google->XPath и)
А в IE/Opera XPath работает ? Я пробовал "скормить" им пример, работающий в FF - ноль эмоций.
Время настанет, время придет...
И лис кОнкурiентов на части порвет !!!
Отсутствует
Как вариант, можно 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ентов на части порвет !!!
Отсутствует
Страницы: 1