在过去的几个小时里,我一直在撞墙,需要一些关于如何解决(我认为很奇怪)问题的建议。
我正在连接到.NET Web服务,并传递一些参数并返回一些用SOAP包装的XML。
我发现通过所有SOAP头来获取我想要与之交互的数据非常繁琐。因为看起来你不能像普通的XML那样迭代它。
var soapEnvelope:XML = new XML(serviceResponse.children()[0] [0] [0] .toXMLString());
所以无论如何,当我从网络服务中追溯我的XML时,我得到了这个:
<data xmlns="http://services.xxx.com" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CurrencyPrice>
<CurrencyID>8</CurrencyID>
<CurrencyFlagImagePath/>
<MidRate>x.xxxx</MidRate>
<CurrencyCode>AUD</CurrencyCode>
<CurrencyName>Australian Dollar (AUD)</CurrencyName>
<BaseCurrency>GBP</BaseCurrency>
<CurrencyChartURL/>
</CurrencyPrice>
</data>
现在如果我经常使用trace(xml.CurrencyPrice [0]);查看第一个CurrencyPrice节点。但我得到一个未定义的。如果我复制出原始跟踪并手动创建XML并删除所有数据xlmns属性
var xml:XML = <data>
<CurrencyPrice>
<CurrencyID>8</CurrencyID>
<CurrencyFlagImagePath/>
<MidRate>x.xxxx</MidRate>
<CurrencyCode>AUD</CurrencyCode>
<CurrencyName>Australian Dollar (AUD)</CurrencyName>
<BaseCurrency>GBP</BaseCurrency>
<CurrencyChartURL/>
</CurrencyPrice>
</data> ;
然后跟踪(xml.CurrencyPrice [0]);
Boom获得了一些我可以使用的XML。
所以我的问题是如何从我尝试使用删除方法定位的标题中删除属性。@ xlmns。什么都不做,或以任何其他方式绕过它。
我很感激任何有关这方面的建议,用谷歌搜索废话我没有到达任何地方。
干杯
Jono
答案 0 :(得分:2)
难道你不能这样说吗?
var raw:String = xml.toXMLString();
//filter the String of namespaces
//and then recreate the xml
var clean:XML = new XML(raw);
然后显然是你正常的XML实践......
trace(clean.CurrencyPrice[0]);
答案 1 :(得分:1)
您是否尝试过Alducente的as3 Web Service库?
答案 2 :(得分:0)
使用名称空间时,您需要在AS3中使用名称空间声明。
public namespace soap = "http://schemas.xmlsoap.org/soap/envelope/";
然后您可以使用以下命令访问子属性:
trace(xml.soap::CurrencyPrice.soap::CurrencyID);
然而,当您使用多个名称空间时,它看起来会变得更加混乱。我从其他似乎有同样问题的人那里找到了这个引用,但只有两个命名空间。我不知道四个人看起来怎么样!
http://headwindslab.net/2009/01/29/parsing-multiple-namespaces-in-as3/
祝你好运! :)