簡體   English   中英

在Windows Phone 8中解析xml字符串

[英]Parsing xml string in windows phone 8

我有以下xml字符串:

<AssumeRoleWithWebIdentityResponse xmlns="https://sts.amazonaws.com/doc/2011-06-15/">
  <AssumeRoleWithWebIdentityResult>
    <SubjectFromWebIdentityToken>us-east-1:xxxx</SubjectFromWebIdentityToken>
    <Audience>us-east-1:xxxxxxxx</Audience>
    <AssumedRoleUser>
      <Arn>arn:aws:sts::xxxxxx/xxxxxx</Arn>
      <AssumedRoleId>xxxx</AssumedRoleId>             
    </AssumedRoleUser>
    <Credentials>      
      <SessionToken>xxxxxx</SessionToken>
      <SecretAccessKey>xxxxx</SecretAccessKey>
      <Expiration>2015-02-03T15:26:03Z</Expiration>
      <AccessKeyId>xxxxxxx</AccessKeyId>
    </Credentials>
    <Provider>xxxxx</Provider>
  </AssumeRoleWithWebIdentityResult>
  <ResponseMetadata>
    <RequestId>xxxxxx</RequestId>
  </ResponseMetadata>
</AssumeRoleWithWebIdentityResponse>

我想在<Credentials>節點內檢索SessionToken

我嘗試了以下方法:

XDocument xdoc = XDocument.Parse(response);
var root = xdoc.Root.Element("AssumeRoleWithWebIdentityResponse");

但變量root返回null。

如何從<Credentials>節點檢索SessionToken?

您犯了兩個錯誤:

  • 根元素沒有AssumeRoleWithWebIdentityResponse元素; 根元素
  • AssumeRoleWithWebIdentityResponse元素位於名稱空間( https://sts.amazonaws.com/doc/2011-06-15/" )中,因此您需要在調用Element或類似Element時指定該名稱。所有后代元素也繼承該名稱空間,除非他們指定其他內容。

因此,例如:

XNamespace ns = https://sts.amazonaws.com/doc/2011-06-15/";
var root = xdoc.Root;
var result = root.Element(ns + "AssumeRoleWithWebIdentityResult");

要從Credentials標記獲取SessionToken ,您可以非常明確:

var token = root.Element(ns + "AssumeRoleWithWebIdentityResult")
                .Element(ns + "Credentials")
                .Element(ns + "SessionToken")
                .Value;

或者只使用Descendants

var token = root.Descendants(ns + "SessionToken").Single().Value;

無論哪種方式,它都使用了重要的名稱空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM