0
<Category id=1>
<MyLines>
      <Line GroupID="0" Cache="15" />
  <Rect GroupID="0" Cache="16"/>
  <Ellipse GroupID="0" Cache="16"/>
</MyLines>

我的 XML 文档包含许多 Category 标签。您能否让我知道获取 Cache = 16 的 MyLines 的每个子元素并删除它们的最佳方法是什么。

我希望使用 linq 来实现这一目标。

我正在尝试如下:

       var q = from node in doc.Descendants("MyLines")
                let attr = node.Attribute("Cache")
                where attr != null && Convert.ToInt32(attr.Value) == 16
                select node;
        q.ToList().ForEach(x => x.Remove());
4

1 回答 1

2

我已经测试了以下代码:

string xml = 
@"<Category id=""1"">
<MyLines>
    <Line GroupID=""0"" Cache=""15"" />
<Rect GroupID=""0"" Cache=""16""/>
<Ellipse GroupID=""0"" Cache=""16""/>
</MyLines>
</Category>";

void Main()
{
    var doc = XDocument.Parse(xml);

    doc.Descendants("MyLines")
    .Elements()
    .Where(el => el.Attribute("Cache").Value == "16") 
    .ToList()
    .ForEach(el => el.Remove());

    doc.Root.ToString().Dump();
}

它打印:

<Category id="1">
   <MyLines>
      <Line GroupID="0" Cache="15" />
   </MyLines>
</Category>

问题是您正在寻找元素Cache上的属性MyLines而不是MyLines元素的子级。

于 2012-09-11T09:05:47.583 回答