C# 删除没有子节点的第一个命名节点

C# 删除没有子节点的第一个命名节点,c#,xml,linq,linq-to-xml,C#,Xml,Linq,Linq To Xml,我有一个xml文件: <a> <Directory name="dir1"> <b>test1</b> <Directory name="dir2"> <c>test2</c> </Directory> </Directory> </a> 您有解决方案吗?您要查找的元素不是根元素的子元素,而是子元素,因此请更改 XNamespace

我有一个xml文件:

<a>
  <Directory name="dir1">
    <b>test1</b>
    <Directory name="dir2">
      <c>test2</c>
    </Directory>
  </Directory>
</a>

您有解决方案吗?

您要查找的元素不是根元素的子元素,而是子元素,因此请更改

XNamespace ns = "http://schemas.microsoft.com/wix/2006/wi";
var x = doc.Root.Element(ns + "Directory");
x.Remove();
doc.Root.Add(x.Elements());

或具有属性值:

XElement directory = doc.Descendants(ns + "Directory").First(x => x.Attribute("Name").Value == "value");

你看过这个吗?您使用所显示的XML显示的确切代码可以正常工作。因此,在您的真实XML和您向我们展示的XML之间存在一些我们看不到的差异。(我猜这是一个名称空间问题。)我用名称空间更新了我的代码,我认为这是一个名称空间问题,但我没有发现问题。
XNamespace ns = "http://schemas.microsoft.com/wix/2006/wi";
var x = doc.Root.Element(ns + "Directory");
x.Remove();
doc.Root.Add(x.Elements());
XNamespace ns = "http://schemas.microsoft.com/wix/2006/wi";
var x = doc.Root.Element(ns + "Directory");
x.Remove();
doc.Root.Add(x.Elements());
XNamespace ns = "http://schemas.microsoft.com/wix/2006/wi";
XElement directory = doc.Descendants(ns + "Directory").First();
XElement parent = directory.Parent;
directory.Remove();
parent.Add(directory.Elements());
XElement directory = doc.Descendants(ns + "Directory").First(x => x.Attribute("Name").Value == "value");