2011-02-14 20 views
6

我想比較2個XML文件。如何比較2使用LINQ在C#中的XML

我XML1是:

<ROOT><NODE><BOOK><ID>1234</ID><NAME isbn="dafdfad">Numbers: Language of Science</NAME><AUTHOR>Tobias Dantzig</AUTHOR></BOOK></NODE></ROOT> 

我有另外一個XML的數據庫是

<Book xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Id>12345</Id><Name isbn="31231223">Numbers: Language of Science</Name><Author>Tobias Dantzig</Author></Book> 

我想比較從XML1從數據庫的XML

「尚書」 節點和 「尚書」 節點
  1. 我有一個從數據庫中獲得的XML名稱空間
  2. 個節點名稱是混合的情況下

我想這2個XML文件節點通過節點的文本比較和屬性值

我使用C#,想知道這是否使用LINQ

可能

任何幫助將非常感激

PS我搜索了類似的帖子,但無法找到我正在尋找的東西。

感謝很多提前

乾杯, KARTHIK

+0

假設你比較他們比較的結果是什麼? – 2011-02-14 07:01:12

+0

我想要的是,如果值不同,那麼我想將它們存儲在xml1中的屬性中。例如:如果ID值不同,那麼比較後,我想存儲如 1234 KK99 2011-02-14 07:06:33

回答

-2

可以很容易地使用Linq to XML甚至簡單Xml DOM來完成。 雖然我會勇敢地與Regular Expressions做到這一點。 一個正則表達式來查找所有的書籍,並且一對夫婦拆解每條記錄。

6

在xml中,大小寫和名稱空間是非常重要的,空格和屬性順序不是(使直接字符串比較不正確)。

所以海事組織你應該解析它;也許XmlSerializer,但(如你注意到),兩者都是平凡解析與LINQ到XML:

string xml1 = @"<ROOT><NODE><BOOK><ID>1234</ID><NAME isbn=""dafdfad"">Numbers: Language of Science</NAME><AUTHOR>Tobias Dantzig</AUTHOR></BOOK></NODE></ROOT>"; 

var book1 = (from book in XElement.Parse(xml1).Elements("NODE").Elements("BOOK") 
      let nameEl = book.Element("NAME") 
      select new 
      { 
       Id = (int)book.Element("ID"), 
       Name = nameEl.Value, 
       Isbn = (string)nameEl.Attribute("isbn"), 
       Author = (string)book.Element("AUTHOR") 
      }).Single(); 

string xml2 = @"<Book xmlns:rdf=""http://www.w3.org/1999/02/22-rdf-syntax-ns#""><Id>12345</Id><Name isbn=""31231223"">Numbers: Language of Science</Name><Author>Tobias Dantzig</Author></Book>"; 
var el = XElement.Parse(xml2); 
var book2 = new 
{ 
    Id = (int)el.Element("Id"), 
    Name = el.Element("Name").Value, 
    Isbn = el.Element("Name").Attribute("isbn"), 
    Author = el.Element("Author") 
}; 

然後,它是比較值的只是一個案例。


另一種方法是使用類似XSLT預先處理的文件之一,以配合其他的預計的佈局,這樣你就可以分享解析代碼。這取決於你是否已經熟悉xslt,我想。