2013-04-30 3 views
1

XML이있어서 로그인을 추출하려고했지만 작동하지 않았습니다. 그것은 항상 나에게 널 준다. 당신이 Root 대상으로 REQUEST을 가지고LINQ to XML - Null

<REQUEST xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
    <LOGIN> 
    <USERID>ID</USERID> 
    <PASSWORD>12345</PASSWORD> 
    </LOGIN> 

    XDocument doc = XDocument.Parse(xmlString); 
     var login = from x in doc.Root.Elements("REQUEST").Elements("LOGIN") 
        select new login 
        { 
         UserId = x.Element("USERID").Value, 
         Password = x.Element("PASSWORD").Value 
        }; 
var loginobject=login.FirstOrDefault(); 

답변

2

이는 XML의 루트 요소를 가져옵니다 doc이 경우 REQUEST입니다. REQUEST 요소를 가져 오지 않으려면 REQUEST 노드에 있기 때문에 LOGIN 요소를 가져오고 싶습니다.

이 시도 : 당신이 당신의 쿼리에 로그인 자식 요소로 직접 이동 할 수 있도록

XDocument doc = XDocument.Parse(xmlString); 
var login = from x in doc.Root.Elements("LOGIN") 
      select new login 
      { 
       UserId = x.Element("USERID").Value, 
       Password = x.Element("PASSWORD").Value 
      }; 
1

귀하의 XML이 약간 잘못되었습니다. 같은로 변경합니다 :

<?xml version="1.0"?> 
<REQUEST> 
    <LOGIN> 
     <USERID>ID</USERID> 
     <PASSWORD>12345</PASSWORD> 
    </LOGIN> 
</REQUEST> 

아니면 같은 당신의 XML을 유지하려는 경우, 그냥 Root.Elements("REQUEST")을 가지고 : 당신이 doc.Root를 사용하는 경우

var login = from x in doc.Root.Elements("LOGIN") 
0

루트 요소는 이미 요청입니다. 다음과 같은 작업을했습니다. Linqpad (쿼리 테스트/개발을위한 훌륭한 도구) :

string xmlString = @"<REQUEST xmlns:i='http://www.w3.org/2001/XMLSchema-instance'> 
    <LOGIN> 
    <USERID>ID</USERID> 
    <PASSWORD>12345</PASSWORD> 
    </LOGIN></REQUEST>"; 

XDocument doc = XDocument.Parse(xmlString); 
    var login = from x in doc.Root.Elements("LOGIN") 
       select new 
       { 
        UserId = x.Element("USERID").Value, 
        Password = x.Element("PASSWORD").Value 
       }; 
var loginobject=login.FirstOrDefault(); 
loginobject.Dump();