如何解决删除子节点保留其父节点
<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')。任何帮助表示赞赏,谢谢...
解决方法
有点不清楚删除元素的标准是什么,但为了让您开始,也许这与您要查找的内容一致?
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 以进行测试运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。