如何正确使用LINQ to XML?

时间:2013-11-27 08:59:00

标签: c# xml linq linq-to-xml

我已经生成了这样的xml文件

 <?xml version="1.0" encoding="utf-8"?>
<Requestes>
  <Single_Request num="1">
    <numRequest>212</numRequest>
    <IDWork>12</IDWork>
    <NumObject>21</NumObject>
    <lvlPriority>2</lvlPriority>
    <NumIn1Period>21</NumIn1Period>
  </Single_Request>
</Requestes>

我的目标是获得IDWorknumRequest等元素。我试着这样做:

foreach (XElement el in doc.Root.Elements())
  {
   if (el.Name == "Single_Request") 
       {
          string num = el.Elements("numRequest").Value;  
// but he says, that he cant do this  .Value because it doest exist at all  
       }          
    }

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您有此错误,因为Elements("numRequest")返回元素集合,而不是单个元素。您应该使用Element("numRequest")代替。

另外,我建议您使用查询按名称获取元素,而不是枚举所有元素并验证其名称:

var request = doc.Root.Element("Single_Request");
var num = (int)request.Element("numRequest");

通常使用匿名类型或自定义对象对从xml解析的值进行分组:

var query = from r in doc.Root.Elements("Single_Request")
            where (int)r.Attribute("num") == 1 // condition
            select new {
                NumRequest = (int)request.Element("numRequest"),
                IdWork = (int)request.Element("IDWork"),
                NumObject = (int)request.Element("NumObject")
            };

var request = query.SinlgleOrDefault();
// use request.IdWork