有什么方法可以切断 xDocument 的某些部分并仍然获得 xDocument?通过切断我的意思是保持选定的节点。
我有这样的 XML:
<something 1>
<object>
Name="The only object I need"
<lev1>
<lev2>
Name= "Attribute I need"
</lev2>
<lev2>
Name= "Attribute I also need"
</lev2>
</lev1>
</object>
<object>
Name="Thing I want to remove"
<lev1>
<lev2>
Name= "useless attribute"
</lev2>
<lev2>
Name= "second useless atribute"
</lev2>
</lev1>
</object>
</something 1>
我需要 xDocument 对象只包含 Name=“我需要的属性”的对象。我知道这很容易,但我找不到。
编辑:
我说的是很多非常巨大的 XML 文件。因此,我不能只选择要删除的内容。
你的意思是你只想要第一个子节点?是的,使用Remove
扩展方法很简单:
doc.Root.Elements().Skip(1).Remove();
样本:
using System;
using System.Linq;
using System.Xml.Linq;
class Test
{
static void Main()
{
var doc = new XDocument(new XElement ("root",
new XElement("child1", new XElement("grandchild1")),
new XElement("child2", new XElement("grandchild2"))));
Console.WriteLine("Document before:");
Console.WriteLine(doc);
doc.Root.Elements().Skip(1).Remove();
Console.WriteLine("Document after:");
Console.WriteLine(doc);
}
}
输出:
Document before:
<root>
<child1>
<grandchild1 />
</child1>
<child2>
<grandchild2 />
</child2>
</root>
Document after:
<root>
<child1>
<grandchild1 />
</child1>
</root>
为了概括这一点,您只想更改Skip
调用以选择您不想保留的元素:
doc.Root
.Elements()
.Where(x => (string) x.Attribute("name") != "name to keep")
.Remove();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句