Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Чтение атрибутов из XML (http://www.flasher.ru/forum/showthread.php?t=186513)

aivashchenko 04.11.2012 19:07

Чтение атрибутов из XML
 
Добрый день!
подскажите как можно прочесть атрибуты из xml файла.
XML:
Код:

<appSettings>

    <add key="1-1" value="1" />
    <add key="2-2" value="2" />
 
  </appSettings>

Код AS3:

var myXML:XML;
 
function allLoad(event:Event):void {
var tempLoader:URLLoader=URLLoader(event.target);
tts: myXML=new XML(tempLoader.data);
if (myXML!="") {
for each (var item:XML in myXML.appSettings); {
ComText.htmlText+='<b>'+item.key+'</b> '+item.value+"<br>";}
} else {
ComText.htmlText="Пока комментариев нет";}
}

Если xml <тег>значение</тег> - проблем нет, но мне нужно прочесть из xml с вложенными атрибутами.

TWETTI 04.11.2012 19:37

Чтобы прочитать атрибут к нему надо обращаться через символ "@"
Код AS3:

xml.tag.@atrubute


aivashchenko 04.11.2012 19:52

Если я правильно понял, то должно быть так:
Код AS3:

function allLoad(event:Event):void {
var tempLoader:URLLoader=URLLoader(event.target);
tts: myXML=new XML(tempLoader.data);
if (myXML!="") {
for each (var item:XML in myXML.comment); {
ComText.htmlText+='<b>'+item.add.@name+'</b> '+item.add.@ip+"<br>";}
} else {
ComText.htmlText="Пока комментариев нет";}
}

К сожалению xml не читает. Подскажите пожалуйста где ошибка.

Добавлено через 1 минуту
для XML:
Код:

<?xml version="1.0" encoding="utf-8"?>
<test_1>
<coment>
<add name="Интервал_отправки_сообщений" ip ="25"/>
</comment>
</test_1>

Добавлено через 1 минуту
Код:

<test_1>
<coment>
<add name="Интервал_отправки_сообщений" ip ="25"/>
</comment>
</test_1>


TWETTI 04.11.2012 20:05

Так будет работать:
Код AS3:

var myXML:XML = new XML(
<test_1>
<comment>
<add name="Интервал_отправки_сообщений" ip ="25"/>
</comment>
</test_1>
);
 
if (myXML)
{
        for each (var item:XML in myXML.comment)
        {
                trace('<b>'+item.add.@name+'</b> '+item.add.@ip+"<br>");
        }
}
else
{
        trace("Пока комментариев нет");
}

У вас были ошибки в самом XML файле и в коде.

aivashchenko 04.11.2012 20:23

прошу прощения за глупость. Вот полны код:
Код AS3:

var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, allLoad);
loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
 
function ioErrorHandler(event:IOErrorEvent):void {
trace("Невозможно загрузить файл - "+event);
}
 
var myXML:XML = new XML();
 
function allLoad(event:Event):void {
var tempLoader:URLLoader=URLLoader(event.target);
myXML=new XML(tempLoader.data);
if (myXML) {
for each (var item:XML in myXML.comment)
        {
                trace('<b>'+item.add.@name+'</b> '+item.add.@ip+"<br>");
        }
}
else
{
        trace("Пока комментариев нет");}
}
var request:URLRequest=new URLRequest("source/comments.xml");
loader.load(request);
loader.load(new URLRequest("source/comments.xml"));
var nameXML:String="source/comments.xml?"+Math.random();

Код:

<test_1>
<comment>
<add name="Интервал_отправки_сообщений" ip ="25"/>
</comment>
</test_1>

подскажите почему лыжи не едут

TWETTI 04.11.2012 20:27

У меня все работает.

aivashchenko 04.11.2012 20:46

скопипастил все отсюда и в AS3 и в xml. ничего не отображает в текстовом окне(((
в кэше не висит пробовал с другого компа

Isfet 05.11.2012 07:55

у меня тоже все работает
у вас так трейсится?
Код AS3:

myXML=new XML(tempLoader.data);
trace(myXML);

если нет, то файл лежит не в том месте.


если да, трейсите так и смотрите на каком шаге у вас не работает
Код AS3:

if (myXML!="") {
        trace(myXML.comment[0]);
        trace(myXML.comment[0].add.@ip);

эту строку
Код AS3:

if (myXML)

замените обратно на
Код AS3:

if (myXML!="")

так как даже при пустом XML она всегда будет возвращать true

elder_Nosferatu 05.11.2012 11:56

Осмелюсь предположить, что топик стартер ожидает вывод в каком нибуть текст-филде ибо действительно все трейсы работают...

gagaga 05.11.2012 13:40

мой вам совет: юзайте StringUtil.substitute()

aivashchenko 07.11.2012 13:43

Спасибо большое! Все работает.
Столкнулся с новой проблемой, если xml такого вида:
Код:

<test_1>
<comment>
<add name="Интервал_отправки_сообщений" ip ="25"/>
<add name="Интервал_отправки_текста" ip ="72"/>
</comment>
</test_1>

мне нужно только IP в переменную, но только например вторую "72". если оставить как сейчас то будет "2572", а надо только "72". При чем если оставить два атрибута то на выходе пишет все атрибуты "name", а потом все атрибуты "ip".

Добавлено через 22 минуты
Понял:
Код AS3:

var spl = ('<b>'+item.add.@value[0]+'</b>');
                comtext.htmlText=spl;

value[0] - первое значение value[2] - второе, и так далее.

spirit2 07.11.2012 15:53

Код AS3:

var spl = ('<b>'+item.add.(@ip == 72)+'</b>');

Это если по значению атрибута искать.

zomkoner 24.01.2013 02:43

Здраствуйте не могу понять работу с xml... подскажите...
вот пхп на сервере...
PHP код:

$xml = '<?xml version="1.0" encoding="utf-8" ?><dataxml>';
        include('bd.php');
        $sql = mysql_query("SELECT * FROM `APPLICATION_FACE` WHERE sex=1");
        while ($row_sql = mysql_fetch_assoc($sql)){
            $xml .= "<stroka key=" . $row_sql['nomer'] . ">";
            $xml .= '<nomer>' . $row_sql['nomer'] . '</nomer>';
            $xml .= '<sex>' . $row_sql['sex'] . '</sex>';
            $xml .= '<href>' . $row_sql['href'] . '</href>';
            $xml .= '</stroka>';
            
        }
        $xml .= '</dataxml>';
        print "result=$xml";

а вот и сам код во флеше, надо просто в трэйс вывести...
Код AS3:

        var respons:XML = new XML(e.target.data.result);
        trace(respons);

в этом случае выводит:
Код:

TypeError: Error #1090: Ошибка интерпретатора XML: элемент имеет неверный формат.

        at _fla::MainTimeline/completeHandler()
        at flash.events::EventDispatcher/dispatchEventFunction()
        at flash.events::EventDispatcher/dispatchEvent()
        at flash.net::URLLoader/onComplete()

а если атрибут key в stroka убрать то всё норм... но при вызове:
respons.stroka.nomer выводит :
Код:

<nomer>1</nomer>
<nomer>2</nomer>

а мне нужно только одно значение и без nomer
я походу очень глубоко запутался... помогите распутаться)))

Добавлено через 15 минут
а ну и заодно)))
мне нужны все значения stroka по отдельности перебрать...это надо xml в масив?

caseyryan 24.01.2013 07:26

С атрибутом все просто, у вас кавычки отсутствуют, то есть вот эту cтроку
Цитата:

<stroka key=" . $row_sql['nomer'] . ">"
нужно переделать вот так:
Цитата:

<stroka key=\"" . $row_sql['nomer'] . "\" >"
или так
Цитата:

<stroka key='" . $row_sql['nomer'] . "' >"
Цитата:

а мне нужно только одно значение и без nomer
Код AS3:

var respons:XML = new XML(e.target.data.result);
trace(respons.nomer[0]);

Цитата:

это надо xml в масив?
Не надо. С XMLList уже можно работать почти как с обычным массивом.

zomkoner 24.01.2013 11:11

caseyryan, спасибо большое... теперь я догнал...)))))))
но всё равно ещё вопрос. раз можно работать как с массивом, то как узнать сколько там значений...?
или можно поставить цикл так чтобы он перебрал все значение и узнавать длину не обязательно?

caseyryan 24.01.2013 11:36

Код AS3:

trace(respons.nomer.length());


zomkoner 24.01.2013 11:42

caseyryan, спасибо но отгуглил и нашел вот такое решение...:
Код AS3:

function completeHandler(e:Event):void{
        var respons:XML = new XML(e.target.data.result);
        var responsList:XMLList = respons.stroka;
              for each (var nameEl:XML in responsList) {
                  trace (nameEl.nomer);
                  trace (nameEl.href);
 
              }
}

сори что не в тему, но может кто подскажет урок по программному рисованию во флеше на as3. такой чтобы не сложно понять было...

Wolsh 24.01.2013 15:30

Одна тема = один вопрос.


Часовой пояс GMT +4, время: 10:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.