2009-11-12 109 views
0

我得到一個對象返回從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

回答

1
<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

2

你已經非常明白了。應該能夠編寫相同的循環,像這樣:

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