解析 xml 中的字符串 windows phone 8
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
或类似的任何内容时指定它。所有后代元素也都继承该名称空间,除非它们指定了不同的内容。
例如:
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;
无论哪种方式,它都在使用命名空间,这是重要的部分。
我有以下 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
或类似的任何内容时指定它。所有后代元素也都继承该名称空间,除非它们指定了不同的内容。
例如:
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;
无论哪种方式,它都在使用命名空间,这是重要的部分。