Просмотр полной версии : xml и ignoreWhite
доброго времени суток. имеется файл хмл.
<photos>
<photo>
<pathToLarge>i2/bhambi.jpg</pathToLarge>
<pathToSmall>i2/bhambi_sm.jpg</pathToSmall>
<client>Bhambi</client>
<URL>http://bhambi.com/</URL>
<technologies>
<item>html</item>
<item>flash</item>
<item>php</item>
<item>.NET</item>
</technologies>
<readMoreLink>link1</readMoreLink>
</photo>
...
</photos>
и флеш. когда отсутствует фраза dataXML.ignoreWhite = true; загрузка картинок происходит, но длина массива не считается (выдает 0). когда эта фраза есть, то длина массива считается, но не происходит загрузка картинок (выдает undefined).
var url:String = "materials2.xml";
dataXML = new XML();
dataXML.ignoreWhite = true;
dataXML.onLoad = loadData;
dataXML.load(url);
function loadData(){
var photos = dataXML.firstChild;
max = photos.childNodes.length;
trace (max);
var temp = 1;
_root.allWorksLinks = this.childNodes[1].childNodes[7].firstChild.toString();
for(var i=0;i<9;i++){
var temp1 = 1;
var index = 0;
_root.lagePics[i] = this.childNodes[1].childNodes[temp].childNodes[1].firstChild.toString();
_root.smallPics[i] = this.childNodes[1].childNodes[temp].childNodes[3].firstChild.toString();
_root.client[i] = this.childNodes[1].childNodes[temp].childNodes[5].firstChild.toString();
_root.path[i] = this.childNodes[1].childNodes[temp].childNodes[7].firstChild.toString();
_root.readMoreLinks[i] = this.childNodes[1].childNodes[temp].childNodes[11].firstChild.toString();
while(this.childNodes[1].childNodes[temp].childNodes[9].childNodes[temp1].firstChild.toString() != undefined){
if(this.childNodes[1].childNodes[temp].childNodes[9].childNodes[temp1].firstChild.toString() != undefined){
...
temp1 += 2;
index += 1;
}
temp += 2;
}
_root.loadFirst();
}
что здесь не так
При анализе скрипта не совсем понял ссылки на root(типа _root.allWorksLinks=...) Это что за объекты? И если можно распишете порядок разборки файла .xml, так будет проще найти ошибку.
вот весь хмл
<?xml version="1.0" encoding="iso-8859-1"?>
<photos>
<photo>
<pathToLarge>i2/bhambi.jpg</pathToLarge>
<pathToSmall>i2/bhambi_sm.jpg</pathToSmall>
<client>Bhambi</client>
<URL>http://bhambi.com/</URL>
<technologies>
<item>html</item>
<item>flash</item>
<item>php</item>
<item>.NET</item>
</technologies>
<readMoreLink>link1</readMoreLink>
</photo>
<photo>
<pathToLarge>i2/denver.jpg</pathToLarge>
<pathToSmall>i2/denver_sm.jpg</pathToSmall>
<client>Denver</client>
<URL>http://denvervip.com/</URL>
<technologies>
<item>html</item>
<item>css</item>
<item>flash</item>
</technologies>
<readMoreLink>link2</readMoreLink>
</photo>
<photo>
<pathToLarge>i2/efrat.jpg</pathToLarge>
<pathToSmall>i2/efrat_sm.jpg</pathToSmall>
<client>Efrat</client>
<URL>http://efrat-k.com/</URL>
<technologies>
<item>html</item>
<item>flash</item>
<item>ASP.NET</item>
</technologies>
<readMoreLink>link3</readMoreLink>
</photo>
<photo>
<pathToLarge>i2/gipo.jpg</pathToLarge>
<pathToSmall>i2/gipo_sm.jpg</pathToSmall>
<client>Gipo</client>
<URL>http://gipo.by/</URL>
<technologies>
<item>html</item>
<item>flash</item>
<item>ASP.NET</item>
</technologies>
<readMoreLink>link4</readMoreLink>
</photo>
<photo>
<pathToLarge>i2/neatnails.jpg</pathToLarge>
<pathToSmall>i2/neatnails_sm.jpg</pathToSmall>
<client>Neatnails</client>
<URL>http://neatnails.com/</URL>
<technologies>
<item>html</item>
<item>flash</item>
<item>ASP.NET</item>
</technologies>
<readMoreLink>link5</readMoreLink>
</photo>
<photo>
<pathToLarge>i2/ruflex.jpg</pathToLarge>
<pathToSmall>i2/ruflex_sm.jpg</pathToSmall>
<client>Ruflex</client>
<URL>http://ruflex.com/</URL>
<technologies>
<item>html</item>
<item>flash</item>
<item>ASP.NET</item>
</technologies>
<readMoreLink>link6</readMoreLink>
</photo>
<photo>
<pathToLarge>i2/rusreg.jpg</pathToLarge>
<pathToSmall>i2/rusreg_sm.jpg</pathToSmall>
<client>Rusreg</client>
<URL>http://rusreg.ru/</URL>
<technologies>
<item>html</item>
<item>flash</item>
<item>ASP.NET</item>
</technologies>
<readMoreLink>link7</readMoreLink>
</photo>
<photo>
<pathToLarge>i2/wingshooting.jpg</pathToLarge>
<pathToSmall>i2/wingshooting_sm.jpg</pathToSmall>
<client>Wingshooting</client>
<URL>http://wingshooting.com/</URL>
<technologies>
<item>html</item>
<item>flash</item>
<item>ASP.NET</item>
</technologies>
<readMoreLink>link8</readMoreLink>
</photo>
<photo>
<pathToLarge>i2/yakova.jpg</pathToLarge>
<pathToSmall>i2/yakova_sm.jpg</pathToSmall>
<client>Yakova</client>
<URL>http://yakova.com/</URL>
<technologies>
<item>html</item>
<item>flash</item>
<item>ASP.NET</item>
</technologies>
<readMoreLink>link9</readMoreLink>
</photo>
<allWorksLink>http://google.com/</allWorksLink>
</photos>
если не вдаватся в подробности:
без ignoreWhite у тебя firstChild - это перенос каретки, который ясен пень никакой длинны не имеет. Это баг еще 5го плеера, я чуть сума не сошел, в свое время, пока не понял откуда там ноги растут.
Так вот. не грузятся видно потому что там не в то место ты смотришь...
вместо хачить твой код, предлагаю воспользоватся моим.
смотри
http://ruslanshestopal.com/docs/rss_xml_livejournal_flash_reader.php
код будет всего лишь такой
var url:String = "materials2.xml";
import XMI;
var my_xml:XMI = new XMI();
my_xml.addListener(this);
my_xml.load(url);
//
this.onXMLLoad = function(xml_obj:Object, xmi_instance:XMI) {
var items_length:Number = xml_obj.photo.length;
trace("my_xml loaded:"+items_length);
for (var i = 0; i<items_length; i++) {
var big_img = xml_obj.photo[i].pathToLarge;
var small_img = xml_obj.photo[i].pathToSmall;
var tech_arr = xml_obj.photo[i].technologies.item;
trace("big image:"+big_img+" small image:"+small_img);
trace("Technologies ->>"+tech_arr);
}
};
this.onLoadFailure = function() {
trace("fail to load");
};
... = this.childNodes[1]... А где Вы видели у документа XML еще какой-то нод, кроме нулевого? Ну не считая комментариев и прочих служебных, которые мы не обрабатываем?
все равно. если записываю так, но присутствует dataXML.ignoreWhite = true; не находит путь к форо и сама длина undefined. а если эту строчку удаляю, то длин а рана 21 (вместо положенного 10)
var len = this.childNodes[1].childNodes.length;
trace (len);
Вы не поняли. Нет никакого this.childNodes[1] и быть не может, по крайней мере если ignoreWhite = true. (А оно должно быть тру обязательно)
У документа есть только ОДИН нод - this.childNodes[0] он же this.firstChild.
Вы просто не понимаете, что this здесь - это сам загруженный XML, весь. this - это не <photos>. И у this есть только один нулевой нод - <photos>, больше нет в принципе. Т.е. childNodes[1] нет вообще, а Вы весь код к нему обращаетесь.
Откуда берется childNodes[1] при отключенном игнорировании - Вам INK• объяснил.
Пробел или перенос становится нулевым нодом, а <photos> - первым. Только не пытайтесь это использовать)))))) С отключенным игнорированием Вы никогда корректную разборку не сделаете, и не надо. Поэтому пожалуйста, перестаньте играть со строчкой во вкл/выкл и сконцентрируйтесь на том, что Вы подразумевали под this.
Переносы становятся нодами - отсюда такая длина.
а если эту строчку удаляю, то длин а рана 21 (вместо положенного 10)
ну раз ты до этого места уже дошел.
то вот в этом то и кроится разгадка (n-1)/2 !
тоесть явно что то лишнее. Так вот это лишнее и есть переносы.
было [0] стало [1]
Тоесть сместилось из за того что переносы тоже учитываются.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.