7

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>

ご覧のとおり、Eメール、パスワード、紹介の詳細、およびUserDetailsで構成されるユーザーがいます。

これが私がそれと問題を解析するところです:

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();
4

3 に答える 3

5

名前空間が含まれる場合は、完全修飾名(名前空間を含む)を使用する必要があります。

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;

または、デフォルトのxml名前空間ディレクティブを使用します

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;
于 2010-08-30T04:46:55.463 に答える
1
    <?xml version="1.0" encoding="UTF-8"?>
    <manifest xmlns="http://ns.adobe.com/f4m/1.0">
        <id>
    video_400
        </id>
        <streamType>
            recorded
        </streamType>
        <duration>
        87.823999999999998
        </duration>
        <bootstrapInfo profile="named" id="bootstrap9368">
        <metadata>
            ele mele
         </metadata>
        </bootstrapInfo>
    </manifest>



var xmlData:XML = new XML(loader.content as String) ;
var f4mNs : Namespace = xmlData.namespace();
trace(this + " onQueueComplete DURATION= " + xmlData.f4mNs::duration);
于 2014-05-23T13:47:10.730 に答える
0

これを試して:

var email:XMLList = resultXml..Email;

//ユーザーのメールにアクセスします
var userEmail:String = String [email.EmailString];

もちろん、ドット構文を使用してEmailStringに直接アクセスすることもできます。

于 2010-08-30T02:32:07.817 に答える