我有一個文件:含有這樣的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內容?
謝謝!
我有一個文件:含有這樣的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內容?
謝謝!
好了,我不知道確切的方式做到這一點在C-夏普, 但基本上不會是默認的態度,以
因爲我是Java開發人員我對C-Sharp XML API不是很熟悉,但基本上我已經看到了XMLDocument和XDocument。而當我沒有錯時,XDocument更新更簡單,但都應該以某種方式做到這一點。
這有幫助嗎?
這似乎工作:
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>
*/
如果你可以使用LINQ到XML這將是相對簡單:
XDocument doc1 = XDocument.Load("a.xml");
XDocument doc2 = XDocument.Load("b.xml");
doc1.Element("headernode").Add(doc2.Root);
//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>
*/
我更喜歡一些其他的答案,但是這是首先想到的是:
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");
這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>
見我的回答對XQuery表達式。或者,如果這不是你想要的,請重新登錄。 – 2011-04-27 21:51:04