如果所有子项都为空,则移除父项和子项
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;
我分享了一个完整的源项目。
执行结果:
我正在创建一些 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;
我分享了一个完整的源项目。
执行结果: