2016-06-22 34 views
0

我对LinQ和Xml没有经验。我需要加入两个XML文件如下将文件中的xml节点添加到现有的xml文件中

file1.xml

<?xml version="1.0" encoding="utf-8"?> 
<RootNode> 
<SubNode> 

<NodeA id="1" /> 
<NodeB id="2" /> 
<NodeC id="3" /> 

</SubNode> 
<LonelyNode/> 
</RootNode> 

file2.xml

<?xml version="1.0" encoding="utf-8"?> 
<RootNode> 
<SubNode> 

<NodeD id="1" /> 
<NodeE id="2" /> 
<NodeF id="3" /> 

</SubNode> 
<LonelyNode/> 
</RootNode> 

实际代码

string fileName1 = "file1.xml"; 
string fileName2 = "file2.xml"; 

string filePath_file1 = String.Format("{0}{1}", rootDirectory, fileName1); 
string filePath_file2 = String.Format("{0}{1}", rootDirectory, fileName2); 

// create xml document from file1.xml 
var document = XDocument.Load(filePath_file1.xml); 

// add file2.xml 
document.Root.Add(XDocument.Load(filePath_file2).Root.Elements()); 
Console.WriteLine(document); 
Console.ReadLine(); 

实际输出

<?xml version="1.0" encoding="utf-8"?> 
<RootNode> 

<SubNode> 
    <NodeA id="1" /> 
    <NodeB id="2" /> 
    <NodeC id="3" /> 
</SubNode> 
<LonelyNode/> 

<SubNode> 
    <NodeD id="1" /> 
    <NodeE id="2" /> 
    <NodeF id="3" /> 
</SubNode> 
<LonelyNode/> 

</RootNode> 

想输出

<?xml version="1.0" encoding="utf-8"?> 
<RootNode> 
<SubNode> 

<NodeA id="1" /> 
<NodeB id="2" /> 
<NodeC id="3" /> 
<NodeD id="1" /> 
<NodeE id="2" /> 
<NodeF id="3" /> 

</SubNode> 
<LonelyNode/> 
</RootNode> 

我怎么能特定节点复制到第一个文件的?我想从file2复制<SubNode>内容。

回答

0

你几乎在那里,而不是加入到Root找到SubNode元素使用Element方法,然后从其他文件添加元素。

document.Root 
     .Element("SubNode") 
     .Add(XDocument.Load(filePath_file2).Root.Element("SubNode").Elements()); 

入住这Demo

输出:

<RootNode> 
    <SubNode> 
    <NodeA id="1" /> 
    <NodeB id="2" /> 
    <NodeC id="3" /> 
    <NodeD id="1" /> 
    <NodeE id="2" /> 
    <NodeF id="3" /> 
    </SubNode> 
    <LonelyNode /> 
</RootNode> 
+0

它的工作原理,谢谢!还可以通过节点名称(NodeA,NodeB,...)对SubNode内容进行排序? – Muflix

+1

这是可能的。 –

+0

我发现这里排序的解决方案http://stackoverflow.com/questions/3469801/sorting-all-the-elements-in-a-xdocument谢谢 – Muflix

相关问题