PDA

Просмотр полной версии : проблемы с Xml


Max Payne
07.08.2005, 15:58
вот текст XML файла (file2.xml):
<person>
<name>Max</name>
<name>Vano</name>
<name>Tom</name>
</person>

хочу его прочитать.
var xml:XML=new XML;
xml.load("file2.xml");
xml.onLoad=function():Void
{
trace("OK!!!");
trace(xml.childNodes[0].childNodes[0]);
trace(xml.childNodes[0].childNodes[1]);
trace(xml.childNodes[0].childNodes[2]);
}
По идее должно быть выведено:
<name>Max</name>
<name>Vano</name>
<name>Tom</name>
Но почему-то выводится:



<name>qqq</name>



Если написать так:
trace(xml.childNodes[0].childNodes[1]);
trace(xml.childNodes[0].childNodes[3]);
trace(xml.childNodes[0].childNodes[5]);
То всё выводиться, почему?

И ешё: как прочитать значение узлов, т.е. Max,Vano,Tom ?
Есть функция nodeValue, пишу trace(xml.childNodes[0].childNodes[1].nodeValue); Но почему-то выводиться null. В книжки написано, что nodeValue выводит значение узла, только если он относится к типу TEXT, а если к ELEMENT, то выводится null. А вот как сделать, так что бы у узла был тип TEXT не написано. Можно конечно программно создавать XML, тогда можно создать узел с типом TEXT, но мне это не нужно, у меня уже есть XML файл, мне нужно его прочитать.

Вобщем буду благодарен за любую помощь.

P.S. Как думаете я правильно выбрал раздел форума, может его перенести в другой раздел?

nuran
07.08.2005, 16:10
вот текст XML файла (file2.xml):
<person>
<name>Max</name>
<name>Vano</name>
<name>Tom</name>
</person>


Но почему-то выводится:



<name>qqq</name>


Бред, такого не может быть.

Max Payne
07.08.2005, 16:40
говоришь не может быть ? посмотри и убедись :d

Ріxеl
08.08.2005, 02:31
смешной код.
qqq оно не выводит.
странно, что оно вообще что-то выводит.
во-первых:
не
var xml:XML=new XML;
а
var myXML:XML = new XML();
(именна лучше использовать оригинальные. хоть седбмой плеер и чувствителен к регистру не стоит таким злоупотреблять. чтобы вызвать функцию нужно добавить круглые скобки)

во-вторых нужно добавить строку

XML.prototype.ignoreWhite = true;

чтобы не было пустых строк и работало "по идее".

в-третьих
можно забить на nodeValue используя ещё раз firstChild;

Вот финальный код:

var myXML:XML = new XML();
myXML.load("xml.xml");
myXML.onLoad=function():Void {
trace("OK!!!");
trace(myXML.firstChild.childNodes[0]);
trace(myXML.firstChild.childNodes[1]);
trace(myXML.firstChild.childNodes[2]);
trace(myXML.firstChild.childNodes[0].firstChild);
trace(myXML.firstChild.childNodes[1].firstChild);
trace(myXML.firstChild.childNodes[2].firstChild);
}
XML.prototype.ignoreWhite = true;


впредь не путай нюрана!

пожалуйста.