LINQ to XML - Null

本文关键字:Null XML to LINQ | 更新日期: 2023-09-27 18:11:40

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

LINQ to XML - Null

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

您的XML有点格式错误,因为您将REQUEST作为Root对象。试着把它改成:

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

根元素已经是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();