C# 无法将Linq中的属性读取为xml,错误:对象引用未设置为对象的实例
我是Linq到xml的新手。我的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
<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")