2016-06-22 30 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

相關問題