Tôi đang cố gắng phân tích một số XML trong AS3 mà tôi nhận được thông qua một cuộc gọi WebService đến C#. C# đang tuần tự hóa bằng cách sử dụng một DataContract để không gian tên là không chuẩn.Đọc XML không gian tên chuẩn không sử dụng E4X trong AS3?
Dưới đây là những gì trông giống như xml:
<User xmlns="http://schemas.datacontract.org/2004/07/UserDatabaseManipulation.POCO" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Email>
<EmailString>
[email protected]
</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>
Như bạn có thể nhìn thấy từ đó tôi có một tài khoản trong đó bao gồm Email, mật khẩu, giới thiệu chi tiết, và UserDetails.
Đây là nơi tôi phân tích nó và các vấn đề:
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;
...
Dưới đây là một ảnh chụp màn hình trong debug view (liên kết sao chép và tái view để xem lớn hơn):
Nếu không có e4x tôi có thể làm cho nó hoạt động như thế này nhưng nó thực sự là clunky:
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();
Ảnh chụp màn hình:
heres SOLUTION
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();
các tác phẩm tuyệt vời như một sự quyến rũ! –