Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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#_Asp.net_Linq To Xml - Fatal编程技术网

C# 无法将Linq中的属性读取为xml,错误:对象引用未设置为对象的实例

C# 无法将Linq中的属性读取为xml,错误:对象引用未设置为对象的实例,c#,asp.net,linq-to-xml,C#,Asp.net,Linq To Xml,我是Linq到xml的新手。我的xml字符串如下所示: <root> <add> <item id="jqg1" moduleid="F0736590-84A2-4795-BC5D-0056606F2446" view="1" add="1" edit="0" del="0" /> </add> <update> <item id="jqg3" moduleid="3C414

我是Linq到xml的新手。我的xml字符串如下所示:

 <root>
    <add>
       <item id="jqg1" moduleid="F0736590-84A2-4795-BC5D-0056606F2446" view="1" add="1" edit="0" del="0" /> 
    </add>
   <update>
        <item id="jqg3" moduleid="3C414435-DBBE-4B4E-A790-14B67F050EB0" view="1" add="1" edit="1" del="0" /> 
    </update>
  </root>
我已经在代码中指定了箭头上面的错误。我应该如何解决此错误


*注:*我的目标是将
元素的
元素数据读入一个变量,我还想对
元素执行同样的操作。有可能吗。。。。欢迎大家提出建议、想法和代码

属性/元素名称区分大小写

替换

l_sMODID = addParam.Attribute("moduleId").Value,

这是因为输入XML中的属性是
moduleid=“F0736590-84A2-4795-BC5D-0056606F2446”
,而不是
moduleid

工作代码:

var doc = XDocument.Load("Input.txt");

Func<XElement, IEnumerable<Item>> query = e => e.Elements("item")
                       .Select(x => new Item
                       {
                           Id = (string)x.Attribute("id"),
                           ModuleId = (string)x.Attribute("moduleid"),
                           View = (bool)x.Attribute("view"),
                           Add = (bool)x.Attribute("add"),
                           Edit = (bool)x.Attribute("edit"),
                           Delete = (bool)x.Attribute("del")
                       });

var addItems = query(doc.Root.Element("add")).ToList();
var updateItems = query(doc.Root.Element("update")).ToList();

您需要首先获取根元素。更改:

var addParams = from addParam in l_oXDoc.Element("add").Elements("item")


为了证明我的错误。。。我纠正了它,但问题仍然存在…等待更多的建议…我已经用工作代码更新了我的答案,这正是我认为你们在问的。你们解决了我的整个问题。非常感谢MarcinJuraszek。。。我希望你再给我一个建议,希望你能给我。要从
var addItems和updateItems
读取所有数据,我必须为变量编写单独的
foreach
循环代码。使用一个
foreach
loop..
var addAndUpdateItems=query(doc.Root.SelectMany(r=>new[]{r.Element(“add”),r.Element(“update”)}),是否有读取所有、添加和更新Items数据的逻辑
或将
query
更改为
e.substands(“item”)
而不是
e.Elements(“item”)
,并使用
doc.Root
调用它:
query(doc.Root)
你的建议对我很有用。问题已经解决了。我想给你宝贵的时间来阅读我的问题并提出建议。但我还有一个问题,希望你能给我一些好的解决方案。在我的xml字符串中,元素和元素(下一个也是xml字符串)都包含在同一个元素中。因此,我如何编写一个代码来读取所有这些元素的元素属性,该属性与l_oXDoc.element(“”)中的addParam具有相同的
var addParams=from addParam
var doc = XDocument.Load("Input.txt");

Func<XElement, IEnumerable<Item>> query = e => e.Elements("item")
                       .Select(x => new Item
                       {
                           Id = (string)x.Attribute("id"),
                           ModuleId = (string)x.Attribute("moduleid"),
                           View = (bool)x.Attribute("view"),
                           Add = (bool)x.Attribute("add"),
                           Edit = (bool)x.Attribute("edit"),
                           Delete = (bool)x.Attribute("del")
                       });

var addItems = query(doc.Root.Element("add")).ToList();
var updateItems = query(doc.Root.Element("update")).ToList();
var addParams = from addParam in l_oXDoc.Element("add").Elements("item")
var addParams = from addParam in 
l_oXDoc.Descendants("root").First().Element("add").Elements("item")