我目前正在从Set节点中提取值,但由于在第一个事务集中找到了删除集,我得到错误 Sequence不包含任何元素。
注意我不想在缺少元素的情况下记录空值。
在迭代所有交易时,我想删除存在Delete元素的完整交易。
我的代码片段:
foreach (var trans in xDocument.Descendants("Transaction"))
{
//Table Item
var val1 =(string)trans.Descendants("Set").Elements("szItemID").First();
var val2 =(string)trans.Descendants("Set").Elements("lMerchandiseStructureID").First();
var val3 = (string)trans.Descendants("Set").Elements("szItemTaxGroupID").First();
dataToBeWritten.Append(val1);
dataToBeWritten.Append(",");
dataToBeWritten.Append(val2);
dataToBeWritten.Append(",");
dataToBeWritten.Append(val3);
dataToBeWritten.Append(",");
dataToBeWritten.Append(Environment.NewLine);
}
Console.WriteLine(dataToBeWritten.ToString());
Console.ReadLine();
答案 0 :(得分:2)
为什么不在Insert元素上替换每个?
foreach (var trans in xDocument.Descendants("Insert"))
这将忽略删除节点。
========================================
确定。添加新答案。你需要检查Set.Count()== 0,如果它是0,只需继续循环。
foreach (var trans in xDoc.Descendants("Transaction"))
{
//Table Item
var itemSet = trans.Descendants("Set");
if(itemSet.Count()==0) continue;
var val1 =(string)trans.Descendants("Set").Elements("szItemID").First();
Console.WriteLine(val1);
}
答案 1 :(得分:0)
如果您想删除带有删除子项的交易,只需执行此类xDocument.Descendants("Transaction").Where(e=>e.Element("Delete")!=null).Remove()
之类的操作即可。
但是为了防止异常,您可以使用FirstOrDefault()
并测试null
甚至更好,因为您只需要fisrt元素,只需使用Element()
代替Elements().First()