2011-04-27 71 views
2

我有一個文件:含有這樣的A.XML:XML:如何讀取一個文件到另一個

<?xml version="1.0"?> 
<headernode> 

</headernode> 

裏面的headernode我需要能夠動態地加載另一個XML文件的內容稱爲B.xml包含以下內容

<?xml version="1.0"?> 
<token> 
<a>0</a> 
</token> 

我的問題是如何獲取a.xml的頭節點內的B.xml內容?

謝謝!

+0

見我的回答對XQuery表達式。或者,如果這不是你想要的,請重新登錄。 – 2011-04-27 21:51:04

回答

0

好了,我不知道確切的方式做到這一點在C-夏普, 但基本上不會是默認的態度,以

  1. 負荷A.XML
  2. 的DOM
  3. 定位headernode
  4. 負載B.XML到DOM
  5. 從DOM乙解決DOM的根對於B
  6. 副本根
  7. 把它作爲孩子到L ocated headernode of DOM A
  8. 重寫修改過的DOM A到檔案或無論你想要 ?

因爲我是Java開發人員我對C-Sharp XML API不是很熟悉,但基本上我已經看到了XMLDocument和XDocument。而當我沒有錯時,XDocument更新更簡單,但都應該以某種方式做到這一點。

這有幫助嗎?

3

這似乎工作:

var header = XDocument.Load("a.xml"); 
var token = XElement.Load("b.xml"); 

var headerNode = header.Elements("headernode").First(); 
headerNode.Add(token); 

Console.WriteLine(header.ToString()); 
/* 
The above prints: 

<headernode> 
    <token> 
    <a>0</a> 
    </token> 
</headernode> 
*/ 
2

如果你可以使用LINQ到XML這將是相對簡單:

XDocument doc1 = XDocument.Load("a.xml"); 
XDocument doc2 = XDocument.Load("b.xml"); 

doc1.Element("headernode").Add(doc2.Root); 
0
//myXmlToInsert.xml 
/* 
<?xml version="1.0"?> 
<root> 
    <child1></child1> 
    <child2></child2> 
    <token> 
     <a>0</a> 
    </token> 
</root> 
*/ 

//code 
XDocument xmlDoc = new XDocument(); 
xmlDoc.Declaration = new XDeclaration("1.0", "utf-8", "yes"); 
xmlDoc.Document.Add(new XElement("rootNode",new XElement("headerNode"), new XElement("bodyNode"))); 
XDocument xmlToInsert = XDocument.Load(@"c:\myXmlToInsert.xml"); 
XElement tokenNode = xmlToInsert.Root.Element("token"); 

xmlDoc.Root.Element("headerNode").Add(tokenNode);  

//Result 
/* 
<?xml version="1.0"?> 
<root> 
    <headerNode> 
    <token> 
     <a>0</a> 
    </token> 
    </headerNode> 
    <bodyNode> 
    </bodyNode> 
</root> 
*/ 
2

我更喜歡一些其他的答案,但是這是首先想到的是:

var a = new XmlDocument(); 
a.Load("c:\\a.xml"); 
var b = new XmlDocument(); 
b.Load("c:\\b.xml"); 
var node = a.SelectSingleNode("/headernode"); 
node.AppendChild(a.ImportNode(b.SelectSingleNode("/token"), true)); 
a.Save("c:\\c.xml"); 
2

這XQuery的:

declare function local:copy-append($element as element()) { 
    if ($element instance of element(headernode)) 
    then 
     element headernode {$element/@*,doc('B.xml')} 
    else 
     element {node-name($element)} 
     {$element/@*, 
      for $child in $element/node() 
      return if ($child instance of element()) 
       then local:copy-append($child) 
       else $child 
     } 
}; 
local:copy-append(/*) 

輸出:

<headernode> 
    <token> 
     <a>0</a> 
    </token> 
</headernode> 
相關問題