问题是根据其属性删除XDocument节点

时间:2013-03-25 10:13:25

标签: c# linq linq-to-xml

我正在尝试删除名为CreditCard的{​​{1}}基于其XDocument属性的doc节点,但该节点未按预期工作。

name是我的doc,看起来像这样:

XDocument

这是我尝试运行的查询,但它不会删除该节点。 XDocument doc = new XDocument( new XComment("XML test file"), new XElement("CreditCards", new XElement("CreditCard", new XAttribute("Name", "TestCard1"), new XAttribute("phoneNumber", 121212142121)), new XElement("CreditCard", new XAttribute("Name", "TestCard2"), new XAttribute("phoneNumber", 6541465561)), new XElement("CreditCard", new XAttribute("Name", "TestCard3"), new XAttribute("phoneNumber", 445588)) ) ); 是一个字符串,我传递给此函数作为参考,告诉它要删除什么

name

我没有遇到任何错误,但也没有删除。

2 个答案:

答案 0 :(得分:2)

您的查询name中包含属性的小写名称。但是在属性的xml名称中是Name。 Xml区分大小写。属性Name也是CreditCard元素的子元素,而不是CreditCards元素的子元素:

doc.Descendants("CreditCards")
   .Elements()
   .Where(c => (string)c.Attribute("Name") == name) 
   .Remove();

答案 1 :(得分:1)

您的代码正在寻找带有名称的“ CreditCards ”,而不是“ CreditCard ”。您也没有在示例文档中的任何位置使用属性。

尝试以下方法;

doc.Descendants("CreditCard")
   .Where(x => (string)x.Element("Name") == name)
   .Remove();