解析AS3 XML对象

问题描述:

我得到一个对象返回从ASP.NET,并跟踪它,如下所示的XML时:解析AS3 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()); 
} 

...我知道这不是完全有效。它现在可以工作,但有一种方法可以使用@符号来获取某些语法的字符串。

任何人都可以请指教?

+0

这是否与命名空间有关?谢谢! – 2009-11-12 13:37:18

<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()); 
+0

我这么认为,darn !!!浪费了我大约2个小时的时间。谢谢回复!!! – 2009-11-12 13:56:27

+1

只需2小时?我已经浪费了超过一天的时间把我的头发拉过名字空间;) – Amarghosh 2009-11-12 14:01:29

+0

Hehehe!尊重男人!你有我最真诚的同情。 :) – 2009-11-18 06:18:59

你已经非常明白了。应该能够编写相同的循环,像这样:

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

看看这些e4x docs,这些都是Flex的,但是这一切都适用,因为它只是AS3。正如你可以看到很多这方面的东西的文档的状态是有点片状:)

+0

这正是今天让我感到困惑的事情,当我尝试这种方式时,就像我今天做的大部分事情一样,我什么都没有得到? – 2009-11-12 13:53:33

+0

啊,是的。错过了'ArrayOfString'中的命名空间:) – rfunduk 2009-11-12 14:50:28

你可以阅读我的回答AS3 - Deepest XML Elements 通过使用SimpleXML,您可以以易于使用的方式解析您的XML。