Форум 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=175470)

Doctor76 17.02.2012 17:02

если приходит такой XML
 
как пример , приходит такой ХМЛ
Код:

<object id='closePolygon'>
                        <controlSpot id='controlSpot0'>
                            <property name='xRel'>
                                <value>-8.47826086956522</value>
                            </property>
                            <property name='yRel'>
                                <value>4.1304347826087</value>
                            </property>                         
                        </controlSpot> 
                                         
                        <property name='dragAndDrop'>
                            <value>false</value>
                        </property>
                        <property name='icon'>                           
                                <matimage cms: link='D:/Documents/Icon/png/24x24/at.png' y0='2' x0='3'/>
                        </property>                                                       
                        <property name='iconColor'>
                            <value>ffffff</value>
                        </property>
                    </object>

пространство имен не объявлено.
Как такое обойти? уже после загрузки ругается (Ошибка #1083)

(Во 2 AS такой xml проходит)

Jewelz 17.02.2012 17:09

что значит после загрузки? загружается текст/байты, или у вас xml socket?

in4core 17.02.2012 17:20

Цитата:

пространство имен не объявлено.
а это тут причем?

Doctor76 17.02.2012 17:24

Загружаю по ссылке через URLLoader
когда присваиваю - выдает ошибку
Код AS3:

private function onComplette(event : Event) : void {
 
        var data:XML = new XML(URLLoader(event.target).data);               
 
        setDataXML(data);
        init();
}

В первой же строчке выдает ошибку.

MikroAcse 17.02.2012 17:27

Вроде бы:
Код AS3:

private function onComplette(event : Event) : void {
 
        var data:XML = new XML(URLLoader(event.currentTarget).data);               
 
        setDataXML(data);
        init();
}

Но я могу и ошибаться

Кстати, откуда появилась data в setDataXML(data)?

Doctor76 17.02.2012 17:27

Цитата:

а это тут причем?
Вот такой загрузится и не выдаст ошибку:
Код:

<object xmlns:cms="http://cms.wiley.com"  id='closePolygon' >
                        <controlSpot id='controlSpot0'>
                            <property name='xRel'>
                                <value>-8.47826086956522</value>
                            </property>
                            <property name='yRel'>
                                <value>4.1304347826087</value>
                            </property>                         
                        </controlSpot> 
                                         
                        <property name='dragAndDrop'>
                            <value>false</value>
                        </property>
                        <property name='icon'>                           
                                <matimage cms: link='D:/Documents/Icon/png/24x24/at.png' y0='2' x0='3'/>
                        </property>                                                       
                        <property name='iconColor'>
                            <value>ffffff</value>
                        </property>
                    </object>


-De- 17.02.2012 17:45

Не проще удалить из него это "cms: "?

Doctor76 17.02.2012 17:50

Можно в принципе. Другого выхода наверно нет.

Genzo 17.02.2012 18:33

Если в XML используются пространства имен, они должны быть перечислены в теге xmlns: ,иначе XML не будет парситься и считается битым.

in4core 17.02.2012 19:14

Цитата:

Если в XML используются пространства имен, они должны быть перечислены в теге xmlns: ,иначе XML не будет парситься и считается битым.
Не знал спасибо. И вот, кстати досих пор не могу понять, а зачем вообще в xml простанства имен нужны? где это может пригодится то вообще?!

Genzo 17.02.2012 19:15

http://www.ininfo.biz/2009/02/26/namespaces-first-look/ вроде нормально расписанно

Doctor76 21.02.2012 12:56

В том то и вся петрушка (я же выше писал, что сам namespace не объявлен)
Так получается, что приходит как бы кусок XML из общего. Впринципе он не правильный/не валидный.
Я все таки выкрутился тем, что вырезаю все эти глюки.
Сначала я принимаю его как стринг (Иначе сразу ошибка!)
Ну и удаляю из него далее.
Кому если пригодится может - вот моя функция:
Код AS3:

             private function normalizeData(data : String) : String {
                        var nsPattern:RegExp = /\b\w\w\w:/gi;
                        data = data.replace(nsPattern,"");                               
                        return data;
                }

Такие вещи, как xmlns: & http: если они есть в ХМЛ этот шаблон не затронет.

wvxvw 21.02.2012 13:43

Регулярное выражение - не фонтан... но с другой стороны, одним регулярным выражением XML не распарсить, т.как нет рекурсий. К сожалению мне не попадался XML парсер написаный на AS3, но, в теории, если бы такой был, то его бы, наверное, и стоило использовать чтобы находить ошибки.
Просто ваше выражение вполне может чего-нибудь испортить в текстовых узлах или в аттрибутах.

Wolsh 21.02.2012 13:49

Если пространство имен, вызывающее ошибку, постоянное, то можно либо вырезать регэкспом конкретно его, либо попробовать прилепить "враппер"))) как корневой узел, в начало и в конец массива байт, а потом уже скармливать XML(). Да вобщем-то и со строкой можно так же.

Doctor76 21.02.2012 18:46

да.. вы правы . Наверно не стоит так обобщать выражение..
Наверно в регЭксп конкретно укажу.

Код AS3:

 private function normalizeData(data : String) : String {
                        var nsPattern:RegExp = /\bcms:/gi;
                        data = data.replace(nsPattern,"");                               
                        return data;
                }



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

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