2016-06-14 6 views
0

私は1つのXMLファイルフィルター

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<File> 
    <Cars> 
     <Car> 
      <Color>Blue</Color> 
      <Year>1988</Year> 
     </Car> 
     <Car> 
      <Color>Green</Color> 
      <Year>1989</Year> 
     </Car> 
     <Car> 
      <Color>Yellow</Color> 
      <Year>1989</Year> 
     </Car> 
    </Cars> 
</File> 

を持っている私は、このオブジェクトでこのファイルにフィルタを作成したい:

public class condition 
{ 
    public string color { get; set; } 

    public string year { get; set; } 
} 

List<condition> c = new List<condition> 
{ 
    new condition() 
    { 
     color = "Green", 
     year = "1989" 
    }, 
    new condition() 
    { 
     color = "Blue", 
     year = "1988" 
    } 
}; 

私は(color = Green and year = 1989) OR (color = blue and year = 1988)

で唯一の車を取りたいです

しかし、私はこれを行う方法がわからない。たぶんXDocumentとLinq.Dynamic?

+0

をXMLにLINQを使用することができます。 –

+0

xmlファイルの特定のコンテンツをオブジェクトに埋め込むことを意味しますか? – Maddy

+0

条件に適合しないすべてのアイテムを削除します。 @SonnyChildsはシリアル化せずに可能ですか?私は通信クラスの作成を避けるでしょう –

答えて

0

XDocumentを使用して、linqで簡単にxmlをフィルタリングできます。この関数は、Remove()拡張メソッドを使用するフィルタに基づいてすべてのノードを削除します。

private void RemoveCars(string color, string year) 
{ 
    var doc = XDocument.Load("<myxml>...</myxml>"); 
    doc.Element("File") 
    .Element("Cars") 
    .Elements("Cars") 
    .Where(c=> c.Element("color").Value == color 
       && c.Element("Year").Value == year) 
    .Remove(); 

    doc.Save("c:\\mypath\\my.xml"); 

} 
+0

ありがとう!どのように変更を加えてファイルを保存するのですか? –

+0

xmlファイルへの変更を保存する方法についてGoogle検索を行います。単純なものをあなたのためにすべての人に頼らないでください。 – MethodMan

+0

更新された回答を参照してください。あなたがやっていることを理解してください。 –

0

別のオプション私は車のオブジェクトのリストにXMLをシリアル化して、あなたの状態のオブジェクトへの車のオブジェクトを比較するリストの内包表記を実行するためにLINQを使用することになり

//XElement xFile = XElement.Load("D:/Sample.xml"); 
     XElement xFile = XElement.Parse 
      (@"<File> 
        <Cars> 
        <Car> 
         <Color>Blue</Color> 
         <Year>1988</Year> 
        </Car> 
        <Car> 
         <Color>Green</Color> 
         <Year>1989</Year> 
        </Car> 
        <Car> 
         <Color>Yellow</Color> 
         <Year>1989</Year> 
        </Car> 
        </Cars> 
       </File> "); 
     List<condition> c = new List<condition> 
         { 
          new condition() 
          { 
           color = "Green", 
           year = "1989" 
          }, 
          new condition() 
          { 
           color = "Blue", 
           year = "1988" 
          } 
         }; 
     var s = new XElement("Cars", 
       from cc in c 
       select new XElement("Car", 
        new XElement("Color", cc.color), 
        new XElement("Year", cc.year) 
       ) 

       ); 
     var result = xFile.Descendants("Cars").Intersect(s.Descendants("Cars")); 

     var fileXML = new XElement("File", result); 
     fileXML.Save("D:/Result.xml");