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();
当您使用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();