带有AS3的SOAP XML

时间:2010-11-14 13:54:27

标签: xml actionscript-3 parsing soap

在过去的几个小时里,我一直在撞墙,需要一些关于如何解决(我认为很奇怪)问题的建议。

我正在连接到.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

3 个答案:

答案 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/

祝你好运! :)