[英]how to compare 2 XML using LINQ in C#
我想比較2個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中的“BOOK”節點和db XML中的“Book”節點
我想逐個節點地比較這兩個XML文件的Text和屬性值
我正在使用C#並想知道使用LINQ是否可行
任何幫助將非常感激
PS我搜索了類似的帖子,但找不到我正在尋找的東西。
非常感謝提前
干杯,Karthik
在xml中,case和namespace非常重要,而whitespace和attribute-order 則不然 (使得直接字符串比較不正確)。
所以IMO你應該解析它; 也許使用XmlSerializer
,但(正如您所注意到的)兩者都使用LINQ-to-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。
可以使用Linq to XML甚至簡單的Xml DOM輕松完成。 雖然我會用正則表達式勇敢地做到這一點。 一個正則表達式找到所有書籍,並且幾個左右的每個記錄都要拆除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.