2015-02-03 2 views
0

나는 다음과 같은 XML 문자열이 있습니다구문 분석 XML 문자열은 8

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

<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를 검색하고자는

나는 다음과 같은 시도

하지만 root 변수는 null을 반환합니다.

<Credentials> 노드에서 SessionToken을 검색하려면 어떻게합니까?

답변

2

당신은 두 개의 실수를했습니다

  • 는 더 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; 

어쨌든 중요한 부분 인 네임 스페이스를 사용하고 있습니다.

+0

오케이 @ 존 스키트, 알겠습니다. 문제는 Credentials 태그에서 SessionToken을 얻는 방법입니다. result.Element ("Credentials") 요소 ("SessionToken") ToString() 및 액세스 위반 예외가 발생했습니다. – jade

+0

@jade : 편집합니다. –

+0

대단한 !!! 그것은 두 옵션 모두 효과적이었습니다. – jade