1

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

3 回答 3

2

当您使用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
            };
于 2013-04-30T21:17:18.180 回答
1

REQUEST作为Root对象,您的 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")
于 2013-04-30T21:17:02.143 回答
0

Root 元素已经是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();
于 2013-04-30T21:19:57.853 回答