我想比较2个XML文件.
我的xml1是:
<ROOT><NODE><BOOK><ID>1234</ID><NAME isbn="dafdfad">Numbers: Language of Science</NAME><AUTHOR>Tobias Dantzig</AUTHOR></BOOK></NODE></ROOT>
Run Code Online (Sandbox Code Playgroud)
我有另一个来自数据库的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>
Run Code Online (Sandbox Code Playgroud)
我想比较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")
};
Run Code Online (Sandbox Code Playgroud)
然后它只是比较值的情况.
另一种方法是使用像xslt这样的东西来预处理其中一个文件以匹配另一个文件的预期布局,这样你就可以共享解析代码.我猜,这取决于你是否已经熟悉xslt.
AK_*_*AK_ -2
使用Linq to XML甚至简单的Xml DOM可以很容易地完成。尽管我会勇敢地使用正则表达式来做到这一点。一个正则表达式可以找到所有书籍,并且大约有几个人可以拆除每条记录。
| 归档时间: |
|
| 查看次数: |
1908 次 |
| 最近记录: |