删除子节点保留其父节点
Remove Child Nodes Keep Their Parent
我有 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'),这预计会在那里发生。感谢任何帮助,谢谢...
有点不清楚删除元素的标准是什么,但为了让您入门,也许这与您要查找的内容相符?
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 进行测试 运行。
我有 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'),这预计会在那里发生。感谢任何帮助,谢谢...
有点不清楚删除元素的标准是什么,但为了让您入门,也许这与您要查找的内容相符?
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 进行测试 运行。