2013-04-30 270 views
1

我有一个XML并试图提取登录,它没有工作。它总是给我null。你有REQUEST作为Root对象LINQ to XML - 空

<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

当您使用doc.Root它得到了XML的根元素doc,在这种情况下是REQUEST。然后您不想获取REQUEST元素,您想获取LOGIN元素,因为您已经在REQUEST节点。

试试这个:

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")

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

根元素已经REQUEST,所以你要直接跳转到查询LOGIN子元素。我有以下工作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();