gpt4 book ai didi

xml - 在 AS3 中使用 E4X 读取非标准命名空间 XML?

转载 作者:数据小太阳 更新时间:2023-10-29 01:47:58 25 4
gpt4 key购买 nike

我正在尝试解析通过对 C# 的 WebService 调用收到的 AS3 中的一些 XML。 C# 正在使用 DataContract 进行序列化,因此命名空间是非标准的。

这是 xml 的样子:

<User xmlns="http://schemas.datacontract.org/2004/07/UserDatabaseManipulation.POCO" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Email>
<EmailString>
bill@whitehouse.gov
</EmailString>
</Email>
<Password>
<PasswordPlainText>
password
</PasswordPlainText>
</Password>
<ReferralDetails>
<ReferralEmail/>
<ServiceCreatedAt>
google
</ServiceCreatedAt>
</ReferralDetails>
<UserDetails>
<Address>
Penn Ave
</Address>
<City>
Washington DC
</City>
<Country>
USA
</Country>
<FirstName>
Bill
</FirstName>
<LastName>
Clinton
</LastName>
<State>
AK
</State>
<Zip>
11111
</Zip>
</UserDetails>
</User>

正如您所见,我有一个用户,其中包含电子邮件、密码、推荐详细信息和用户详细信息。

这是我解析它的地方和问题:

private function onResult(event:ResultEvent):void
{
var n:Namespace = new Namespace("http://schemas.datacontract.org/2004/07/UserDatabaseManipulation.POCO");
use namespace n;

//This WORKS! ResultXml is loaded with the correct looking XML.
var resultXml:XML = new XML(event.result);

//This doesnt work! I just end up with an empty XMLList.
var email:Object = resultXml.Email;

...

这是调试 View 中的屏幕截图(复制链接并重新查看以放大):

alt text

没有 e4x,我可以让它像这样工作,但它真的很笨重:

var resultXml:XML = new XML(event.result);   // the whole block of XML

var email:XML = resultXml.children()[0]; // the email object XML

var emailText:XML = email.children()[0]; // the email text

var emailActualXml:XML = emailText.children()[0]; // the email string in xml

var emailString:String = emailActualXml.toString();

截图:

alt text

解决方案

var xmlNamespace:Namespace = new Namespace( // namespace in here );         

var resultXml:XML = new XML(event.result);

var email:XMLList = resultXml.xmlNamespace::Email;

var emailString:Object = email.xmlNamespace::EmailString.text().toString();

最佳答案

当涉及命名空间时,您必须使用完全限定名称(包括命名空间)。

var n:Namespace = new Namespace("http://schemas.datacontract.org/2004/07/UserDatabaseManipulation.POCO");
var resultXml:XML = new XML(event.result);
var email:Object = resultXml.n::Email;

或者使用 default xml namespace指令

default xml namespace = new Namespace("http://schemas.datacontract.org/2004/07/UserDatabaseManipulation.POCO");

var resultXml:XML = new XML(event.result);
var email:Object = resultXml.Email;

关于xml - 在 AS3 中使用 E4X 读取非标准命名空间 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3597455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com