【问题标题】:Remove Child Nodes Keep Their Parent删除子节点保留其父节点
【发布时间】:2021-06-11 03:44:18
【问题描述】:

我有如下的 XML 代码块(它是数百行类似行的一部分..):

<specs>
    <spec name='fald' value = '100'>
        <name></name>
        <value></value>
    </spec>
</specs>

我需要转换如下代码:

  <specs>
     <spec name ='fald' value = '100'/>
  </specs>

使用以下代码我可以删除子节点:

foreach (XElement child in doc.Descendants().Reverse())
{
    if (child.HasAttributes)
    {
        foreach (var attribute in child.Attributes())
        {
            if (string.IsNullOrEmpty(attribute.Value) && string.IsNullOrEmpty(child.Value))
                child.Remove();
        }
    }
}

但是这个过程也会删除父节点('spec'),预计会在那里发生。任何帮助表示赞赏,谢谢...

【问题讨论】:

  • 您粘贴的代码是否正确?您的代码 sn-p 不会删除任何元素:请参阅 this fiddle
  • 另外,您能否用几句话描述您想要的结果中的规则是什么?是规则吗?即“如果一个 spec 元素的 name 和 value 属性为空,则删除它的子元素”?
  • @Xerillio 它删除了 '' 因为该子节点没有属性也没有值,也删除了下面的子节点,但随后节点 'spec' 也消失了......

标签: c# xmldocument xelement


【解决方案1】:

有点不清楚删除元素的标准是什么,但为了让您开始,也许这与您正在寻找的东西差不多?

var xml =
    @"<specs>
        <spec name='fald' value='100'>
          <name></name>
          <value></value>
        </spec>
      </specs>";

var doc = XElement.Parse(xml);

var childrenToDelete = doc.XPathSelectElements("//spec/*")
    .Where(elem => string.IsNullOrEmpty(elem.Value)
            && (!elem.HasAttributes
            || elem.Attributes().All(attr => string.IsNullOrEmpty(attr.Value))))
    .ToList();

foreach (var child in childrenToDelete)
{
    child.Remove();
}

// Produces:
// <specs>
//   <spec name="fald" value="100" />
// </specs>

检查this fiddle 进行测试运行。

【讨论】:

  • 感谢您的努力,但是,名称和值节点仍然存在,我想将其删除,只留下带有她的属性的 'spec'...
  • @biryaz 检查我的更新,这对你有用吗?
  • 唯一接受的格式是托管公司的...
  • @biryaz 我不确定我是否理解。代码的行为方式是否与您想要的不同?尝试在您自己的数据上进行测试。我只是做了一些“随机”的示例输入,因为我对背景了解不多。
  • 上面给出的代码可以满足我的需要,但问题是我不知道哪个节点有这种情况,因为它是由另一部分代码创建的,例如下面的代码对于其他类型的节点很有用将被删除:“doc.Descendants().Where(e => string.IsNullOrEmpty(e.Value)).Remove();”,因此我无法提供节点名称或完整路径...
猜你喜欢
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2013-02-04
相关资源
最近更新 更多