2014-04-29 94 views
1

如果節點爲空,我想使用RemoveChild()從XML結構中刪除一些子元素。我的XML:當節點爲空時RemoveChild

<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。節點是否有多個空節點?

+2

'element5'和'str56'是變量非常糟糕的名字。我強烈建議您將它們改爲有意義的。 –

回答

2

添加一個條件,只有當你需要創建的元素:

if (!string.IsNullOrEmpty(status)) 
{ 
    XmlElement statusElement = xmlDocument.CreateElement("Status"); 
    statusElement.InnerText = status; 
    customerElement.AppendChild((XmlNode)statusElement); 
} 

或者,如果你需要它已經創建之後將其刪除(例如,因爲你從外部源XML與空Status) ,使用相同的條件來刪除它:

if (!string.IsNullOrEmpty(status)) 
{ 
    customerElement.RemoveChild(statusElement); 
} 
+0

我將代碼粘貼到我的xml後喜Tim S.當我輸出xml時,狀態仍然出現。以及如果有多於一個空節點需要刪除?我需要粘貼每個代碼嗎? – user2523188

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")); 
0

使用LINQ到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()

相關問題