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

私の XML ドキュメントには、多くのカテゴリ タグが含まれています。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、要素の属性を探していたことです。MyLinesMyLines

于 2012-09-11T09:05:47.583 に答える