2009-02-06 4 views
2

J'ai deux documents similaires, mais je dois trouver un moyen élégant et efficace pour comparer les deux fichiers et retourner les valeurs dans le DoC# 1 qui n'existent pas dans le DoC# 2.Comment puis-je comparer 2 documents XML?

XML DoC# 1

 <ids> 
     <id>1</id> 
     <id>2</id> 
     <id>5</id> 
     <id>6</id> 
     <id>7</id> 
     <id>8</id> 
     <id>9</id> 
     </ids> 
    </ids> 

XML DoC# 2

<ids> 
    <id>1</id> 
    <id>2</id> 
    <id>7</id> 
    <id>8</id> 
    <id>9</id> 
    </ids> 

Je pensais à l'aide de LINQ si je pouvais joindre ces deux documents sur le champ id. Y a-t-il un meilleur moyen? Je cherche à retourner l'ID # 5 et 6.

Répondre

6

Voici un exemple que je sais fonctionne, je l'ai seulement essayé avec de petits fichiers (File1.xml avait 20 éléments, File2.xml 8 éléments).

XDocument file1Doc = XDocument.Load("File1.xml"); 
XDocument file2Doc = XDocument.Load("File2.xml"); 

IEnumerable<string> file1Elements = from d in file1Doc.Descendants("Id") 
            select d.Value; 

IEnumerable<string> file2Elements = from d in file2Doc.Descendants("Id") 
            select d.Value; 

var difference = file1Elements.Except(file2Elements); 

Alternativement, et probablement plus en ligne avec ce que vous cherchez est:

XDocument file1Doc = XDocument.Load("File1.xml"); 
XDocument file2Doc = XDocument.Load("File2.xml"); 

IEnumerable<string> file2Elements = from d in file2Doc.Descendants("Id") 
            select d.Value; 

var x = from include in file1Doc.Descendants("Id") 
     where file2Elements.Contains(include.Value) != true 
     select include; 

Vous pourriez également trouver de l'aide à la recherche 101 LINQ Samples on MSDN.

+0

fonctionne parfaitement. danke. –

+0

heureux je pourrais aider –

Questions connexes