3

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

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

4

1 回答 1

1

请使用此示例

 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);
            }
于 2013-07-07T03:24:39.693 回答