C# c语言中的窄xdocument

C# c语言中的窄xdocument,c#,xml,C#,Xml,是否有任何方法可以切断xDocument的某些部分,然后仍然获得xDocument?通过切断,我的意思是保留选定的节点。 我有这样的XML: 我需要xDocument对象,它只包含我需要的Name=属性的对象。我知道这很简单,但我找不到。编辑: 我说的是很多非常庞大的XML文件。因此,我不能只选择要删除的内容。您的意思是只需要第一个子节点?是的,使用扩展方法很简单: doc.Root.Elements().Skip(1).Remove(); 样本: using System; using Sy

是否有任何方法可以切断xDocument的某些部分,然后仍然获得xDocument?通过切断,我的意思是保留选定的节点。 我有这样的XML:

我需要xDocument对象,它只包含我需要的Name=属性的对象。我知道这很简单,但我找不到。编辑:
我说的是很多非常庞大的XML文件。因此,我不能只选择要删除的内容。

您的意思是只需要第一个子节点?是的,使用扩展方法很简单:

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>

谢谢你的新知识,我不知道。但我的xml的结构要复杂得多,我需要更多的东西来缩小它的范围,属性名=我唯一需要的对象need@ArkadiuszRaszeja:那么你应该把它放在问题中,而不是说你只需要保留第一个元素。我回答了你的问题,因为这就是我要做的。不过,您应该能够修改我的答案——只需将Skip改为Where子句,它选择您不想保留的每个元素。正如我所说的,我的XML的结构非常复杂,所以选择要删除的元素没有意义。选择我想要保留的东西更容易。@ArkadiuszRaszeja:如果你想这样做,那好。我已经给了你一个原始问题的答案,现在给你一个修改后的答案,并举例说明。如果你决定忽略这些,那是你的选择。。。但我建议申请一个单程证!从要选择的元素转换为要删除的元素的角色非常简单…@ArkadiuszRaszeja:我放弃了。我已经尽可能清楚地解释了如何回答您提出的问题,并给出了简单的解决方案。我怀疑你是否能找到其他人来回答你仍然不清楚的问题。我建议你删除它,然后在删除时进行编辑,或者问一个新问题,更努力地澄清,以避免浪费别人的时间。现在你改变了问题,使我的答案看起来无效-请不要这样做。接下来,您的XML可能不是这样的-我怀疑您实际上有XML属性,而不是表单Name=唯一需要的对象的文本节点。我建议您将问题还原到以前的版本,我将编辑我的答案,以解决更一般的问题。您的问题也非常不清楚如果只需要一个嵌套元素会发生什么。您只是试图从顶层修剪元素,还是修剪树的所有类型的位?总体而言,我需要在object中使用name=唯一需要的对象的lev2中的所有名称。我尝试了xdoc.Elements.Wherex=>x.Attributexmlns+Name.Value.ToString==我唯一需要的对象。FirstOrDefault;但我得到了一个错误,比如x变量并没有被调用,翻译成德语…这非常非常不清楚。请阅读并在问题上投入更多的精力。提供一个合适的XML输入文档和预期的输出,以及您已经尝试过的内容。在某些孙子元素需要保留而其他元素不需要保留的情况下,确保您清楚自己想要什么。我甚至没有发现您的错误消息是德语。我想你应该能够看到,在那次评论之前很久,我就已经对缺乏清晰性失去了耐心。。。当然不涉及种族歧视,但我不喜欢浪费时间在变化和不清楚的问题上。不过,应该没有必要使用IQueryable。
Document before:
<root>
  <child1>
    <grandchild1 />
  </child1>
  <child2>
    <grandchild2 />
  </child2>
</root>
Document after:
<root>
  <child1>
    <grandchild1 />
  </child1>
</root>
doc.Root
   .Elements()
   .Where(x => (string) x.Attribute("name") != "name to keep")
   .Remove();