如果所有子项都为空,则移除父项和子项

Remove parent and children if all children are empty

我正在创建一些 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 有很多标签将在不同级别删除。

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

请使用以下功能。

    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

执行结果: