2011-02-08 107 views
0

我有合并两个XML文件的问题。 我将两个文件加载到两个对象中,将目标节点放在两个对象中并试图合并。合并两个xml文件LINQ

这里有一个例子:

var nodes1 = XResult1.Descendants("subject"); 
var nodes2 = XResult2.Descendants("subject"); 

//nodes1.Add(nodes2.Nodes()); 

// *代码合并** 有人可以请帮助我。 在此先感谢... BB

这里是我的XResult1:

 
<subjects> 
    <subject> 
     <node id="1"> 
      Hi 
     </node> 
     <node id="2"> 
      Hi again 
     </node> 
     <node id="3"> 
      Hi once more 
     </node> 
    </subject> 
</subjects> 

这里是我的XResult2:

 
<subjects> 
    <subject> 
     <node id="4"> 
      Hello 
     </node> 
     <node id="5"> 
      Hello again 
     </node> 
    </subject> 
</subjects> 

而我最终的结果应该是:

 
<subjects> 
    <subject> 
     <node id="1"> 
      Hi 
     </node> 
     <node id="2"> 
      Hi again 
     </node> 
     <node id="3"> 
      Hi once more 
     </node> 
     <node id="4"> 
      Hello 
     </node> 
     <node id="5"> 
      Hello again 
     </node> 

    </subject> 
</subjects> 

回答

3

你想改变:

XResult1.Descendants("subjects").FirstOrDefault(); 
XResult2.Descendants("subjects").FirstOrDefault(); 

XResult1.Descendants("subject").FirstOrDefault(); 
XResult2.Descendants("subject").FirstOrDefault(); 

下面是一个更完整的例子:

XDocument document = XDocument.Load(@"C:\XResult1.xml"); 
XElement subjectElement = document.Descendants("subject").FirstOrDefault(); 

XDocument document2 = XDocument.Load(@"C:\XResult2.xml"); 
XElement subjectElement2 = document2.Descendants("subject").FirstOrDefault(); 

subjectElement.Add(subjectElement2.Nodes()); 
0

如果要合并的subject元素中的元素,你需要向下走的更远的树,所以设置你的nodes1nodes2以下几点:

XElement nodes2 = XResult2.Descendants("subjects").Descendants("subject").FirstOrDefault(); 
+0

你的答案的第一部分是不正确。 – 2011-02-08 21:02:00

+0

@Russell McClure你是对的,出于某种原因,我正在考虑列表。固定。 – vlad 2011-02-08 21:14:22