C# LINQ到XML-Null

C# LINQ到XML-Null,c#,C#,我有一个XML,试图提取登录名,但没有成功。它总是给我空的 <REQUEST xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <LOGIN> <USERID>ID</USERID> <PASSWORD>12345</PASSWORD> </LOGIN> XDocument doc = XDocument.Parse(xm

我有一个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();

身份证件
12345
XDocument doc=XDocument.Parse(xmlString);
var login=来自doc.Root.Elements(“请求”).Elements(“登录”)中的x
选择新登录名
{
UserId=x.Element(“UserId”).Value,
密码=x.Element(“密码”).值
};
var loginobject=login.FirstOrDefault();

您的XML格式有点不正确,因为您将
请求
作为
根对象。尝试将其更改为以下内容:

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

当您使用
doc.Root
时,它获取XML文档的根元素,在本例中是
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
            };

根元素已经是请求,因此您希望直接跳转到查询中的登录子元素。我在Linqpad(测试/开发查询的绝佳工具)中获得了以下成果:

string xmlString=@”
身份证件
12345
";
XDocument doc=XDocument.Parse(xmlString);
var login=来自doc.Root.Elements中的x(“login”)
选择新的
{
UserId=x.Element(“UserId”).Value,
密码=x.Element(“密码”).值
};
var loginobject=login.FirstOrDefault();
loginobject.Dump();
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
            };
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();