如果子节点没有值,则删除父级

时间:2014-05-03 19:27:58

标签: c# xml

如果child为空,我想从XML结构中删除父元素。 我的XML:

<Customers>
<customer>
    <Name>John</Name>
    <Age>25</Age>
    <Status>single</Status>
</Customer>
<customer>
    <Name>Jack</Name>
    <Age></Age>
    <Status></Status>
</Customer>
</Customers>

应该成为:

<Customers>
    <customer>
        <Name>John</Name>
        <Age>25</Age>
        <Status>single</Status>
    </Customer>
    </Customers>

我的代码:

XmlElement element3 = xmlDocument.CreateElement("Age");
        element3.InnerText = str3;
        element1.AppendChild((XmlNode)element3);    
XmlElement element4 = xmlDocument.CreateElement("Status");
        element4.InnerText = str4;
        element1.AppendChild((XmlNode)element4);

如果年龄和状态子项为空,如何删除父“客户”?

2 个答案:

答案 0 :(得分:1)

您可以使用XPath语法和SelectNodes()方法轻松地从XmlDocument获取特定节点。

选择具有子节点<Customer><Age>的{​​{1}}元素为空的示例,然后删除所选元素:

<Status>

更新:

您似乎是构建XML的人。因此,我建议检查var nodes = xmlDocument.DocumentElement.SelectNodes("//Customer[Age = '' and Status = '']"); foreach (XmlElement node in nodes) { node.ParentNode.RemoveChild(node); } str3是否为空,如果它们是删除相应的str4元素:

<Customer>

答案 1 :(得分:0)

我知道您在创建新文件并在验证后添加每个元素。我认为这对你有用:

XDocument input = XDocument.Load("customers.xml");
XDocument output = new XDocument();
output.Add(new XElement("Customers"));
IEnumerable<XElement> elements = input.Element("Customers").Elements("customer");
foreach (XElement el in elements)
{
    string age = el.Element("Age").Value;
    string status = el.Element("Status").Value;
    if (age != "" || status != "")
    {
        output.Element("Customers").Add(el);
    }
}
output.Save("customers.xml");