Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как правильно подключить (Embed) и прочитать, xml (http://www.flasher.ru/forum/showthread.php?t=162084)

saikspaik 29.07.2011 23:24

Как правильно подключить (Embed) и прочитать, xml
 
Пытаюсь подключить xml-файл, но ничего не получается в самом начале.
Подключаю так:
Код AS3:

[Embed(source = 'assets/test.xml', mimeType="text/xml")] private var lvl:Class;

Потом делаю так:
Код AS3:

var xmlLevel:XML = new XML();
xmlLevel = XML(new lvl());
trace(xmlLevel.layer.(@type == "decoration"));

Но до этого кода даже не доходит, выскакивают ошибки просто при подключении.
Ошибки такие:
LevelParser_lvl.as(1): col: 72 Error: Syntax error.
package { public class LevelParser_lvl { public static var data:XML = <?xml version="1.0">
LevelParser_lvl.as(18): col: 1 Error: Syntax error: expecting identifier before end of program.
LevelParser_lvl.as(18): col: 1 Error: Syntax error: expecting rightbrace before end of program.


XML-файл выглядит так:
Код:

<?xml version="1.0">
<level>
        <layer type="collision">
0,0,0,0
0,0,0,0
        </layer>
        <layer type="decoration">
0,0,0,0
0,0,0,0
        </layer>
        <objects>
                <yDiamond x="376" y="160"/>
                <Hero x="16" y="208"/>
                <rDiamond x="348" y="152"/>
                <bDiamond x="572" y="168"/>
        </objects>
</level>

Собственно, что я делаю не так?

КорДум 29.07.2011 23:33

А разве в xml можно делать многострочные значения?
Код AS3:

0,0,0,0\n0,0,0,0

Код AS3:

trace(xmlLevel.layer.@type == "decoration");


saikspaik 29.07.2011 23:38

Вот так то же самое.
Код:

<?xml version="1.0">
        <objects>
                <yDiamond x="376" y="160"/>
                <Hero x="16" y="208"/>
                <rDiamond x="348" y="152"/>
                <bDiamond x="572" y="168"/>
        </objects>
</level>


КорДум 29.07.2011 23:50

Цитата:

Сообщение от saikspaik (Сообщение 1016059)
Вот так то же самое.
Код:

<?xml version="1.0">
        <objects>
                <yDiamond x="376" y="160"/>
                <Hero x="16" y="208"/>
                <rDiamond x="348" y="152"/>
                <bDiamond x="572" y="168"/>
        </objects>
</level>


Где открывающий <level>?

silin 30.07.2011 00:04

Код AS3:

[Embed(source='test.xml', mimeType="application/octet-stream")] private var lvl:Class;

Код AS3:

var file:ByteArray = new lvl();
var str:String = file.readUTFBytes( file.length );
var xml:XML = new XML( str );
trace( "xml : " + xml );


dimarik 30.07.2011 00:11

Код AS3:

var file:ByteArray = new lvl() as ByteArray; // на самом деле это ByteArrayAsset


saikspaik 30.07.2011 02:15

Цитата:

Сообщение от КорДум (Сообщение 1016062)
Где открывающий <level>?

Очепятка, с ним то же самое.

silin
Это видел, это же отсюда?
По примеру, в принципе, работает.

Но почему не хочет без ByteArray?
Вот например, другой вариант, без ByteArray, работает:
Код AS3:

var urlload:URLLoader = new URLLoader();
var xml:XML = new XML();
urlload.addEventListener(Event.COMPLETE, loadtxt);
urlload.load(new URLRequest("test.xml"));
function loadtxt(event:Event):void {
        xml = XML(event.target.data);
        trace(xml);
}

Не пойму, почему нельзя так с Embed проделать.

dimarik
Не совсем понял.

Добавлено через 22 минуты
Так, все заработало как нужно.
Скорее всего не хватало правильного mimeType в Embed и последнего знака вопроса в <?xml version="1.0"?>
Рабочий вариант выглядит так:
Код AS3:

[Embed(source = 'test.xml', mimeType="application/octet-stream")] private var lvl:Class;//Подключение
 
var xml:XML = new XML(new lvl());
trace(xml.layer.(@type=="decoration"));//Использование

XML-файл выглядит так:
Код:

<?xml version="1.0"?>
<level>
        <layer type="collision">
0,0,0,0
0,0,0,0
        </layer>
        <layer type="decoration">
0,0,0,0
0,0,0,0
        </layer>
        <objects>
                <yDiamond x="376" y="160"/>
                <Hero x="16" y="208"/>
                <rDiamond x="348" y="152"/>
                <bDiamond x="572" y="168"/>
        </objects>
</level>

Всем спасибо, можно расходиться :)

in4core 30.07.2011 14:52

Первый раз слышу чтобы без ByteArray работало :(

i.o. 30.07.2011 14:55

неявный вызов toString()

saikspaik 30.07.2011 14:58

Цитата:

Сообщение от in4core (Сообщение 1016240)
Первый раз слышу чтобы без ByteArray работало :(

Вот так - век живи, век учись :)
Хорошо что я не знал, что без ByteArray нельзя :D


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

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