如果节点为空,我想使用RemoveChild()
从XML结构中删除一些子元素。我的XML:
<Customers>
<customer>
<Name>John</Name>
<Age>25</Age>
<Status></Status>
</Customer>
<customer>
<Name>John</Name>
<Age></Age>
<Status></Status>
</Customer>
</Customers>
应该成为:
<Customers>
<customer>
<Name>John</Name>
<Age>25</Age>
</Customer>
<customer>
<Name>John</Name>
</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);
如何删除空节点resp。节点是否有多个空节点?
答案 0 :(得分:2)
添加条件以仅在需要时创建元素:
if (!string.IsNullOrEmpty(status))
{
XmlElement statusElement = xmlDocument.CreateElement("Status");
statusElement.InnerText = status;
customerElement.AppendChild((XmlNode)statusElement);
}
或者,如果您需要在创建它之后将其删除(例如,因为您从外部源Status
获取XML),请使用相同的条件将其删除:
if (!string.IsNullOrEmpty(status))
{
customerElement.RemoveChild(statusElement);
}
答案 1 :(得分:0)
这是因为你试图删除一个根本不存在的子元素。您必须了解,在此上下文中,RemoveChild()方法需要引用父项子项中的现有节点。
如果我要使用上面的代码示例并创建一个独立的代表,它将如下所示:
XmlDocument doc = new XmlDocument();
XmlElement element1 = doc.CreateElement("Customer");
XmlElement element2 = doc.CreateElement("Name");
element2.InnerText = "John";
element1.AppendChild(element2);
XmlElement element3 = doc.CreateElement("Age");
element3.InnerText = "25";
element1.AppendChild(element3);
XmlElement element4 = doc.CreateElement("Status");
element4.InnerText="";
element1.AppendChild(element4);
doc.AppendChild(element1);
element1.RemoveChild(element1.SelectSingleNode("Status"));
答案 2 :(得分:0)
使用Linq-to-XML:
如果你想要节点:
<a>
<b>
<c></c>
</b>
</a>
成为:
<a />
使用:
XElement root = XElement.Load(file);
root.Descendants().Reverse().ToList().ForEach(x =>
{
if (x.IsEmpty)
x.Remove();
});
但如果你想要它:
<a>
<b />
</a>
删除.Reverse()