Анализ XML-объектов AS3

Я получаю объект обратно из ASP.NET, и при трассировке XML он выглядит следующим образом:

var xml:XML = new XML(event.message.body);
trace(xml);

Получаю следующий результат:

<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://localhost:49329/">
    <string>One</string>
    <string>Two</string>
    <string>Three</string>
</ArrayOfString>

Я пытаюсь перебрать структуру, чтобы извлечь строки, но безуспешно. Я использую следующий код:

for each(var item:Object in xml.children())
{
    MonsterDebugger.trace(this, item.toString());
}

... и я знаю, что это не совсем эффективно. Сейчас он работает, но есть способ получить строки с некоторым синтаксисом, используя знак @.

Кто-нибудь может посоветовать?


person josef.van.niekerk    schedule 12.11.2009    source источник
comment
Это как-то связано с пространством имен? Спасибо!   -  person josef.van.niekerk    schedule 12.11.2009


Ответы (3)


<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://localhost:49329/">
    <string>One</string>
    <string>Two</string>
    <string>Three</string>
</ArrayOfString>

Вы также должны позаботиться о пространстве имен:

var ns:Namespace = new Namespace("http://localhost:49329/");
var strings:XMLList = xml.ns::string;
for each(var str:XML in strings)
  trace(str.text());
person Amarghosh    schedule 12.11.2009
comment
всего 2 часа? Я потратил больше дня, теребя пространства имен;) - person Amarghosh; 12.11.2009

Вы в значительной степени поняли. Должна быть возможность написать такой же цикл вот так:

for each( var el:XML in xml.string ) {
  trace( el.toString() );
}

Взгляните на эти документы e4x, это для Flex, но все это применимо, потому что это просто AS3. Как видите, документация по многим из этих вещей немного нестабильна :)

person rfunduk    schedule 12.11.2009
comment
Это именно то, что меня так сильно смущает сегодня, когда я пытаюсь таким образом, как я делал большую часть сегодняшнего дня, я просто ничего не получаю? - person josef.van.niekerk; 12.11.2009
comment
Ах да. Пропустил пространство имен в ArrayOfString :) - person rfunduk; 12.11.2009

Вы можете прочитать мой ответ на AS3 - самые глубокие элементы XML. Используя SimpleXML, вы можете анализируйте ваш XML простым в использовании способом.

person RaamEE    schedule 14.03.2011