Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确使用LINQ到XML?_C#_Xml_Linq_Linq To Xml - Fatal编程技术网

C# 如何正确使用LINQ到XML?

C# 如何正确使用LINQ到XML?,c#,xml,linq,linq-to-xml,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> <lvlPrio

我已经生成了这样的
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>

如何修复此问题?

您有此错误,因为
元素(“numRequest”)
返回元素集合,而不是单个元素。您应该使用
元素(“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

哦,谢谢,现在它工作了。)我需要弄清楚如何从
string
转换到
int
)@Rocketq只是将元素转换为
int
,而不是读取它的
值。LINQ to XML将解析值并返回整数值,以供您参考@lazyberezovsky的帮助,现在它可以正常工作了。您可以使用subjects方法获取特定类型的所有节点,而不是循环遍历整个XML文件:
doc.Root.subjects(“单次请求”)
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