我想通过属性找到一个节点并将其移到底部。
XNode node = doc.Root.Elements().Where(e => e.Attribute("id").Value == "123").FirstOrDefault();
if (node != null)
{
node.Root.Elements().Where(s => e.Attribute("id").Value == "123").Remove();
doc.Root.Add(node);
}
这并不总是有效。在.Remove()行上,我有时会得到nullReferenceException。所以我想这意味着它匹配并在FirstOrDefault()上获得了一个节点,但是后来同样精确的linq查询两行后来没有匹配任何东西。没看到这是怎么可能的。我错过了什么吗?什么都没有同时触及这个文件或任何东西。
答案 0 :(得分:1)
请使用此sample:
var foos = (from xElem in xDoc.Root.Descendants("Foo")
where xElem.Attribute("id").Value == "2" || xElem.Attribute("id").Value == "3"
select xElem).ToList();
var newParentElem = (from xElem in xDoc.Root.Descendants("SubSection")
where xElem.Attribute("id").Value == "C"
select xElem).Single();
foreach(var xElem in foos)
{
xElem.Remove();
newParentElem.Add(xElem);
}