Не удается разобрать XML AS3 во флэш-памяти с пространствами имен

Я не понимаю, почему я не могу разобрать эти данные:

<places yahoo:start="0" yahoo:count="1" yahoo:total="1" xmlns="http://where.yahooapis.com/v1/schema.rng" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng">

    <place yahoo:uri="http://where.yahooapis.com/v1/place/23424819" aaa:lang="en-US" xmlns:aaa="http://www.w3.org/XML/1998/namespace">
        <woeid>23424819</woeid>
        <placeTypeName code="12">Pays</placeTypeName>
        <name>France</name>
        <country type="Pays" code="FR" woeid="23424819">France</country>
        <timezone type="Fuseau Horaire" woeid="28350911">Europe/Paris</timezone>
    </place>
</places>

Я хочу получить woeid (23424819) Это полные данные xml, извините, это была ошибка в >places>

Я старался: ...

var xml:XML = new XML(e.currentTarget.data);
trace(xml); // => that is working it is print xml datas
trace (xml.places); // => nothing
trace (xml.place); // => nothing
trace (xml.place.woeid); // => nothing
trace (xml.place[0].woeid); // => nothing

Как я могу получить woeid?


person Fred    schedule 12.06.2015    source источник
comment
Вам нужно добавить свое пространство имен yahoo при получении place   -  person BadFeelingAboutThis    schedule 12.06.2015
comment
не могли бы вы быть более точным, пожалуйста, на примере?   -  person Fred    schedule 12.06.2015
comment
Можете ли вы отредактировать свой вопрос с помощью полного xml, который вы пытаетесь проанализировать?   -  person BadFeelingAboutThis    schedule 12.06.2015
comment
Этот xml в любом случае недействителен. Если вы собираетесь публиковать xml и примеры кода, не публикуйте поддельные. В любом случае проверьте статью о senocular и прокрутите вниз до раздела пространства имен: senocular.com/flash /tutorials/as3withflashcs3/?page=4   -  person BotMaster    schedule 12.06.2015
comment
это была не подделка, это был журнал Firefox, интерпретирующий ленту.   -  person Fred    schedule 12.06.2015
comment
последний - копирование/вставка из приложения   -  person Fred    schedule 12.06.2015


Ответы (1)


Поскольку узел корневых мест объявляет конкретное пространство имен, вам нужно указать AS3 использовать это пространство имен перед доступом к нему:

Вот пример:

//create a namespace that matches the namespace of the places node
var ns:Namespace = new Namespace("http://where.yahooapis.com/v1/schema.rng");

//tell AS3 to use this namespace as the default
default xml namespace = ns;

var xml:XML = <places yahoo:start="0" yahoo:count="1" yahoo:total="1" xmlns="http://where.yahooapis.com/v1/schema.rng" xmlns:yahoo="http://www.yahooapis.com/v1/base.rng">

    <place yahoo:uri="http://where.yahooapis.com/v1/place/23424819" xml:lang="fr">
        <woeid>23424819</woeid>
        <placeTypeName code="12">Pays</placeTypeName>
        <name>France</name>
        <country type="Pays" code="FR" woeid="23424819">France</country>
        <timezone type="Fuseau Horaire" woeid="28350911">Europe/Paris</timezone>
    </place>
</places>;

//now everything you'd expect should work. 
trace(xml.place[0].woeid);

Если у вас много пространств имен и вы не хотите устанавливать значение по умолчанию, вы также можете просто сделать это:

trace(xml.ns::place.ns::woeid);

Если вам нужно получить доступ к чему-либо в пространстве имен yahoo (например, к uri узла place), вы можете сделать следующее:

var yNs:Namespace = new Namespace("http://www.yahooapis.com/v1/base.rng");
trace(xml.place.@yNs::uri);
person BadFeelingAboutThis    schedule 12.06.2015