在AS3中使用E4X读取非标准命名空间XML?
发布时间:2020-12-16 07:46:17 所属栏目:百科 来源:网络整理
导读:我试图通过对C#的WebService调用来解析AS3中的一些 XML. C#使用DataContract进行序列化,因此命名空间是非标准的. 这是xml的样子: User xmlns="http://schemas.datacontract.org/2004/07/UserDatabaseManipulation.POCO" xmlns:i="http://www.w3.org/2001/XM
我试图通过对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> 22222 </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; ... 这是调试视图中的屏幕截图(复制链接和重新查看以查看更大): 没有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(); 截图: 解决方案 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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |