【问题标题】:Remove parent and children if all children are empty如果所有孩子都为空,则删除父母和孩子
【发布时间】:2021-06-18 07:50:49
【问题描述】:

我正在创建一些 XML 文件,但遇到了问题。我试图在网上找到其他答案,但没有帮助。

如果上述父项的所有子项均为空,我想删除 XML 中的父项和子项。例如:

<client>
   <name>test</name>
   <adresses>
      <address>
         <adressname>test1</adressname>
         <adressplace>somewhere</adressplace>
      </address>
      <address>
         <adressname />
         <adressplace />
      </address>
   </adresses>
</client>

应该变成:

<client>
   <name>test</name>
   <adresses>
      <address>
         <adressname>test1</adressname>
         <adressplace>somewhere</adressplace>
      </address>
   </adresses>
</client>

XML 中有很多标签将在不同级别上被删除。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 这似乎是一个相当相似的问题和答案? stackoverflow.com/questions/53868719/…
  • @DanJames:我尝试了该解决方案,但它抛出了缺少父级的错误。而且我在调试时找不到错误:(
  • @viveknuna 我尝试实施此解决方案:stackoverflow.com/questions/53868719/… 但它不起作用,因为如果一个孩子是空的,它会删除所有内容。仅当所有子项都为空时,我才想删除父项和子项

标签: c# xml children


【解决方案1】:

请使用以下功能。

    private void RemoveNodesWithEmptyValue(XmlNode node)
    {
        if (node.ChildNodes.Count == 0)
        {
            if (node.Value == null)
            {
                node.ParentNode.RemoveChild(node);
            }
        }
        else
        {
            int nCount = node.ChildNodes.Count;

            for (int i = nCount - 1; i >= 0; i--)
            {
                RemoveNodesWithEmptyValue(node.ChildNodes[i]);
            }

            if (node.ChildNodes.Count == 0)
            {
                if (node.Value == null)
                {
                    node.ParentNode.RemoveChild(node);
                }
            }
        }
    }

通过以下代码,可以得到想要的结果。

// input xml string
string strXml = "..."; 

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(strXml);
RemoveNodesWithEmptyValue(xmlDoc.DocumentElement);

string result = xmlDoc.OuterXml;

我共享一个完整的源代码项目。

Download from Dropbox

执行结果:

【讨论】:

    猜你喜欢
    • 2019-02-02
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2018-03-29
    • 2015-03-26
    • 2016-12-24
    相关资源
    最近更新 更多