在xdocument中移动节点

时间:2013-07-07 03:22:39

标签: c# .net linq linq-to-xml

我想通过属性找到一个节点并将其移到底部。

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查询两行后来没有匹配任何东西。没看到这是怎么可能的。我错过了什么吗?什么都没有同时触及这个文件或任何东西。

1 个答案:

答案 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);
            }