对包含自定义命名空间的XML 进行分析是比较困难的,它要求该命名空间一定要在任何XML 返回前被申明,同时要在该命名空间内进行分析。比如对于以下的一个xml:
test.xml
- <?xml?version="1.0"?>??
- <soap:Envelope??
- xmlns:soap="http://www.w3.org/2001/12/soap-envelope"??
- soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">??
- <soap:Body?xmlns:m="http://www.example.org/stock">??
- <m:PriceResult>??
- <m:Price>34.5</m:Price>??
- </m:PriceResult>??
- </soap:Body>??
- </soap:Envelope>??
在Applicaiton中如下:
<?xml?version="1.0"?encoding="utf-8"?>??
<mx:Application?xmlns:mx="http://www.adobe.com/2006/mxml"?layout="absolute"?xmlns:local="*">??
????<mx:Script>??
????????<!--[CDATA[??
????????????import?mx.rpc.events.ResultEvent;??
??????????????
??????????????
????????????private?function?loadXML():void??
????????????{??
????????????????https.send();??
????????????}??
????????????private?function?doResult(evt:ResultEvent):void??
????????????{??
????????????????var?xml:XML?=?evt.result?as?XML;??
??????????????????
??????????????????
????????????????namespace?w3c?=?"http://www.w3.org/2001/12/soap-envelope";??
????????????????use?namespace?w3c;??
namespace?m?=?"http://www.example.org/stock";??
namespace?m;??
????????????????lbl.text?=?xml.w3c::Body.m::PriceResult.m::Price;??
//这样取不到正确结果??
??
????????]]-->??
????</mx:Script>??
????<mx:Button?x="297"?y="289"?label="Button"?click="loadXML()"/>??
????<mx:HTTPService?id="https"?url="test.xml"?result="doResult(event)"?resultFormat="e4x"/>??
????<mx:Label?x="212"?y="198"?text="显示结果:"/>??
????<mx:Label?x="291"?y="198"?width="132"?id="lbl"/>??
</mx:Application>???
注意代码中:
namespace?w3c?=?"http://www.w3.org/2001/12/soap-envelope";??
?namespace?w3c;??
namespace?m?=?"http://www.example.org/stock";??
namespace?m;??
如果没有这些代码的话是不能得到正确结果的,大家可以测试以下,新建一个工程,然后把以上代码copy过去就可以了。在Flex3CookBook中有提到这个问题