2014-08-28 55 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