2010-02-03 4 views
1
나는 다음 시도하고 그것이 내가 요소를 열거 할 수에서하여 XDocument를 만들이

하여 XDocument하지만 밤은 검색 문자열

<?xml version=\"1.0\" encoding=\"UTF-8\"?><searchResponse requestID=\"500\" status=\"success\"><pso><psoID ID=\"61F2C644-F93A-11DE-8015-73A11AB14291\" targetID=\"mezeoAccount\"><data><email>[email protected]</email><quotaMeg>2048</quotaMeg><quotaUsed>1879736</quotaUsed><active>true</active><unlocked>true</unlocked><allowPublic>true</allowPublic><realm>mezeo</realm><bandwidthQuota>1000000000</bandwidthQuota><billingDay>1</billingDay></data></psoID></pso></searchResponse>" 

과 같은 웹 사이트에서 반환 된 문자열을 받고 있어요

에서 구문 분석

XDocument doc = new XDocument(); 
doc = XDocument.Parse(respStr); 

하지만 null을 반환 할 때마다 요소 나 하위 항목을 쿼리하면됩니다. 나는 오류를 반환하지 않습니다

string s = doc.Element("email").Value; 
// or 
doc.Descendants("data"); // returns null as well 

XDocument.Parse을 갈 수 없어,하지만 난 검색하여 XDocument를하지 않는 것.

누구나 내가 뭘하고 있는지 분명히 잘못 이해할 수 있습니까?

답변

1

XDocument.Parse를 호출하기 전에 새 XDocument를 만들 필요가 없습니다. 이것은 어떤 문제도 발생하지 않을 것이며, 그것은 단지 무의미합니다.

doc.Element("email").Value; 

두 번째 예는 잘 보이는 : 이메일 문서 루트의 자식이 아니기 때문에

그러나,이 라인은 잘못된 것입니다. 이것은 나를 위해 작동 :

string s = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><searchResponse requestID=\"500\" status=\"success\"><pso><psoID ID=\"61F2C644-F93A-11DE-8015-73A11AB14291\" targetID=\"mezeoAccount\"><data><email>[email protected]</email><quotaMeg>2048</quotaMeg><quotaUsed>1879736</quotaUsed><active>true</active><unlocked>true</unlocked><allowPublic>true</allowPublic><realm>mezeo</realm><bandwidthQuota>1000000000</bandwidthQuota><billingDay>1</billingDay></data></psoID></pso></searchResponse>"; 
XDocument doc = XDocument.Parse(s); 
foreach (XElement e in doc.Descendants("data")) 
    Console.WriteLine(e); 

결과 :

당신의 세 번째 질문 (이 답변에 의견을 참조)에 대응
<data> 
    <email>[email protected]</email> 
    <quotaMeg>2048</quotaMeg> 
    <quotaUsed>1879736</quotaUsed> 
    <active>true</active> 
    <unlocked>true</unlocked> 
    <allowPublic>true</allowPublic> 
    <realm>mezeo</realm> 
    <bandwidthQuota>1000000000</bandwidthQuota> 
    <billingDay>1</billingDay> 
</data> 

이 시도 :

using System; 
using System.Xml.XPath; 
using System.Xml.Linq; 

class Program 
{ 
    public static void Main() 
    { 
     string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><searchResponse requestID=\"500\" status=\"success\"><pso><psoID ID=\"61F2C644-F93A-11DE-8015-73A11AB14291\" targetID=\"mezeoAccount\"><data><email>[email protected]</email><quotaMeg>2048</quotaMeg><quotaUsed>1879736</quotaUsed><active>true</active><unlocked>true</unlocked><allowPublic>true</allowPublic><realm>mezeo</realm><bandwidthQuota>1000000000</bandwidthQuota><billingDay>1</billingDay></data></psoID></pso></searchResponse>"; 
     XDocument doc = XDocument.Parse(xml); 
     foreach (XElement e in doc.XPathSelectElements("/searchResponse/pso/psoID/data/*")) 
       Console.WriteLine(e); 
    } 
} 

출력 :

<email>[email protected]</email> 
<quotaMeg>2048</quotaMeg> 
<quotaUsed>1879736</quotaUsed> 
<active>true</active> 
<unlocked>true</unlocked> 
<allowPublic>true</allowPublic> 
<realm>mezeo</realm> 
<bandwidthQuota>1000000000</bandwidthQuota> 
<billingDay>1</billingDay> 
+0

동일한 예를 통해 살펴보면, 내가 보여준대로 텍스트를 출력하는 문장 하나가 생깁니다. 예를 들어 전자 메일 필드의 값을 읽게하려면 어떻게해야합니까? 나는 doc.Element ("email")로 갈 수 있어야한다고 생각했다. doc.Element ("email")입니다. 값이 잘못 되었습니까? –

+0

"email"이 문서 루트의 하위가 아니기 때문에 "data"의 하위 항목이므로 올바르지 않습니다. Element는 직접적인 자식만을 가져옵니다. 손주도 원한다면 자손 ("이메일")을 사용하십시오. 아니면 XPath로 할 수 있습니다 :'using System.Xml.XPath;'...'foreach (XElement e in doc.XPathSelectElements ("/ searchResponse/pso/psoID/data/email"))'. 힌트 : 당신은 처음에이 질문을 했어야합니다. 그러면 두 가지 질문을하는 대신에 바로 답을 얻었을 것입니다. –

+0

죄송합니다, 잘 모르겠습니다. 데이터의 모든 개별 요소를 읽는 올바른 방법은 무엇입니까? 나는 새로운 MezeoAccount을 선택 ("데이터") doc.Descendants에 PSO에서 var에 psoQuery = 시도했다 { 이메일 = pso.Element ("이메일"). 값, QuotaMeg = Convert.ToInt64 (pso.Element ("quotaMeg ").). 값. .. 그러나 그것은 아무것도 돌려주지 않았다. Console.Write (doc.Element ("searchResponse") 요소로 값을 가져올 수 있습니다.) 요소 ("pso") 요소 ("psoID") 요소 ("data") 요소 ("email") 값); 그냥 틀렸어. –