【问题标题】:Remove first named node without childs删除没有子节点的第一个命名节点
【发布时间】:2015-10-06 20:55:22
【问题描述】:

我有这个 xml 文件:

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

我将删除名称为“dir1”且不包含子目录的目录。 我想要这个:

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

确切的 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Fragment>
    <DirectoryRef Id="APP">
      <Directory Id="dirA4F7A43D3DBF467AC127F1422D00240E" Name="folder">
        <Component Id="cmpCCEB1A915DCA242C688E53A21CE3C3CD" Guid="">
          <File Id="fil0507E8B9603778F116316274B82F92D9" KeyPath="yes" Source="C:\Documents and Settings\folder\toto.xls" />
        </Component>
        <Component Id="54" Guid="">
          <File Id="fil1E594FEBC557E93E0B15FC1DC3DE315F" KeyPath="yes" Source="C:\Documents and Settings\folder\APP.CFG" />
        </Component>
        ......
        ...
      </Directory>
     </DirectoryRef>
  </Fragment>
</Wix>

我阅读了其他 stackoverflow 主题,但它不起作用或对于没有命名的 XElement。 我会使用 Linq-to-Xml。 我尝试了这个solution 尝试删除第一个目录,但它不起作用(x 为空):

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

你有解决办法吗?

【问题讨论】:

  • 你看过这个吗? stackoverflow.com/a/14969753/4063639
  • 您使用 XML 显示的确切代码可以正常工作。因此,您的 real XML 与您向我们展示的内容之间存在一些我们看不到的差异。 (我猜这是命名空间问题。)
  • 我用命名空间更新了我的代码,我认为这是一个命名空间问题,但我没有找到问题。

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


【解决方案1】:

你要找的元素不是根元素的子元素,是后代,所以改

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");

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多