Remove all parent node#39;s content if any child node has no value(如果任何子节点没有值,则删除所有父节点的内容)
本文介绍了如果任何子节点没有值,则删除所有父节点的内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果父节点的任何子节点没有值,我希望将其删除。
我试过几种方法,都不管用。如果子节点"E_Code_List_Qualifier"或"E_Industry_Code"为空,请删除"S_Industry_Code"父节点及其所有子节点。我需要一个通用案例,以便该代码也可以在其他空的父节点或子节点中使用。请帮助!有什么建议吗?
namespace TEST
{
class Remove_Empty_Tags
{
public static void Main()
{
XmlDocument doc = new XmlDocument();
doc.Load(@"C:UsersTestDLMSoutI_636806391809983753.xml");
new RemoveNulls().RemoveEmptyNodes(doc);
doc.Save(@"C:usersDesktopAllNullsRemoved.xml");
}
}
}
class RemoveNulls
{
public void RemoveEmptyNodes(XmlDocument doc)
{
XmlNodeList nodes = doc.SelectNodes("//node()");
foreach (XmlNode node in nodes)
if ((node.Attributes != null && node.Attributes.Count == 0) && (node.ChildNodes != null && node.ChildNodes.Count == 0))
{
// node.ParentNode.RemoveChild(node); //removes only nodes that are blank
node.ParentNode.RemoveAll(); //removes child nodes leaves empty parent
// node.ParentNode.ParentNode.RemoveAll(); //removes everything
}
}
}
// Content of XML file
<File>
<T_Requisition_511R Standard="X12">
<S_Transaction_Set_Header>
<E_Transaction_Set_Code>511</E_Transaction_Set_Code>
<E_Transaction_Set_Number>0001</E_Transaction_Set_Number>
</S_Transaction_Set_Header>
<S_Beginning_Segment_for_Material_Management>
<E_Transaction_Set_Purpose_Code>00</E_Transaction_Set_Purpose_Code>
<E_Transaction_Type_Code>A0</E_Transaction_Type_Code>
<E_Date>20181217</E_Date>
<E_Time>152620</E_Time>
</S_Beginning_Segment_for_Material_Management>
<L_Assigned_Number>
<L_Code_Source_Information>
<S_Industry_Code>
<E_Code_List_Qualifier_Code>A9</E_Code_List_Qualifier_Code>
<E_Industry_Code> </E_Industry_Code>
</S_Industry_Code>
<S_Industry_Code>
<E_Code_List_Qualifier_Code>79</E_Code_List_Qualifier_Code>
<E_Industry_Code>03</E_Industry_Code>
</S_Industry_Code>
<S_Industry_Code>
<E_Code_List_Qualifier_Code>80</E_Code_List_Qualifier_Code>
<E_Industry_Code> </E_Industry_Code>
</S_Industry_Code>
</L_Code_Source_Information>
</L_Assigned_Number>
</T_Requisition_511R>
</File>
推荐答案
string xml_string = @"<File>...</File>";
var xml = XElement.Parse(xml_string);
var empty = xml.Descendants()
.Where(d => d.Elements().Count() == 0 && d.Value.Trim() == "")
.Select(d => d.Parent);
empty.Remove();
这篇关于如果任何子节点没有值,则删除所有父节点的内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如果任何子节点没有值,则删除所有父节点的内容
基础教程推荐
猜你喜欢
- c# Math.Sqrt 实现 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 将 XML 转换为通用列表 2022-01-01