2014-08-28 76 views
0

這是幾個小時我正在計算這個,但沒有運氣。我想問問如何刪除多個節點。選擇多個節點刪除

當我做單節點我沒有任何問題,但是當我添加條件「或」,或者如果它總是刪除整個節點。

希望有人能幫助。

這是我迄今所做的:

XML

<ApplDetails> 

<NodeLog> 
<PName> 
test123 
</PName> 
</NodeLog> 

<NodeLog> 
<PName> 
test125 
</PName> 
</NodeLog> 

<NodeLog> 
<PName> 
test126 
</PName> 
</NodeLog> 

</ApplDetails> 

C#代碼

XmlDocument xdoc1 = new XmlDocument(); 
xdoc1.Load("D:\\nodes.xml"); 
foreach (XmlNode node in xdoc1.SelectNodes("ApplDetails/NodeLog")) 
{ 

    if (node.SelectSingleNode("PName").InnerText != "test123" || node.SelectSingleNode("PName").InnerText != "test125" ) 
    { 
     node.ParentNode.RemoveChild(node); 
    } 

} 

xdoc1.Save("D:\\nodes.xml"); 
+0

僅供參考,如果你只是學習,那麼你不應該使用'XmlDocument'。閱讀「LINQ to XML」。 – 2014-08-28 21:43:48

+0

謝謝先生。主席先生,我知道我做了什麼是不可能實現使用XmlDocument?好吧,先生,我將閱讀關於「LINQ to XML」的閱讀。 – mammoth 2014-08-28 21:48:45

+0

'XmlDocument'是老方法。不要理會它。學習LINQ to XML代替。 – 2014-08-28 22:11:28

回答

0

的值不能等於test123,並在同一時間test125所以條件總是true(最多一個子句可以是false - 嘗試test123,你會得到'test123' != 'test123' || 'test123' != 'test125' - 第一個子句是false,但第二個是true,因此表達式評估爲true)。如果你想刪除所有不是'test123'而不是'test125'的元素,你需要&&而不是||

+0

謝謝它的工作原理! – mammoth 2014-08-28 23:17:16

0

在LINQ to XML:

var xDoc = XDocument.Load(@"D:\nodes.xml"); 
xDoc.Root.Elements("NodeLog") 
    .Where(w => (string)w.Element("PName") == "test123" || (string)w.Element("PName") == "test125") 
    .Remove(); 
xDoc.Save(@"D:\nodes.xml"); 
+0

嗨,先生,我可以知道這是否適用於框架2.0?我需要運行它的框架v 2.0 – mammoth 2014-08-28 22:23:21

+0

美好的一天,鄉紳。你在原來的問題中沒有提到框架2.0。 – jzm 2014-08-29 01:14:09