2013-07-19 81 views
0

我有兩個XML文件,一個名爲config.xml和configtemplate.xml。我想要做的是將configtemplate.xml中的行添加到config.xml文件中。從XML模板更新XML文件

config.xml 
<?xml version="1.0" encoding="utf-8"?> 
<config> 
<Database> 
    <DataType>1</DataType> 
    <ServerName>192.168.50.80</ServerName> 
    // add information here supplied by the configtemplate.xml 
</Database> 

<Services> 
    <Wash>1</Wash> 
    // add information here supplied by the configtemplate.xml 
</Services> 

<Options> 
    <TaxRate>8.125</TaxRate> 
    <AskForZipcode>0</AskForZipcode> 
// add information here supplied by the configtemplate.xml 
</Options> 

我需要的是它從configtemplate.xml得到的所有數據,並將其添加到配置文件沒有它覆蓋和值都在他們的。

此外,configtemplate.xml中的值將會與他們可能具有的值不同。

configtemplate.xml 
<?xml version="1.0" encoding="utf-8"?> 
<config> 
<Database> 
    <DataType>1</DataType> 
    <ServerName>192.168.50.80</ServerName> 
    // add all lines below to config.xml 
    <DatabaseName>TestDB</DatabaseName> 
</Database> 

<Services> 
    <Wash>1</Wash> 
    // add all lines below to config.xmlxml 
    <Greeter>0</Greeter> 
</Services> 

<Options> 
    <TaxRate>8.125</TaxRate> 
    <AskForZipcode>0</AskForZipcode> 
// add all lines below to config.xml 
    <AutoSave>1</AutoSave> 
</Options> 

我希望我自我正確解釋,謝謝您

+0

你試圖做這在C++或C#? –

+0

C#是我喜歡的方式,但是我不在乎lol – FantasyPC

回答

0

如果我正確理解你,你可以使用ImportNode從一個XML數據添加到另一個。

就是這樣。

XmlDocument doc1 = new XmlDocument(); 
doc1.Load("config.xml"); 
XmlDocument doc2 = new XmlDocument(); 
doc2.Load("configtemplate.xml"); 
XmlNode doc1root, doc2root, importNode; 

doc1root = doc1.DocumentElement; 
doc2root = doc2.DocumentElement; 

foreach(XmlNode node in doc2root.ChildNodes) 
{ 
    importNode = doc1root.OwnerDocument.ImportNode(node, true); 
    doc1root.AppendChild(importNode); 
} 

這樣它導入<Database><Services><Options>configtemplate.xmlconfig.xml中<config>

在你的情況,你需要知道你想從導入的標籤和,在你的例子中沒有指定。

說明:

doc1rootconfig.xml的,這是<config>

doc2root的根標籤是configtemplate.xml,這是<config>

的根標籤在foreach循環中,您正在循環遍歷每個的子節點(這是<Database><Services><Options>),並且將每個子節點是doc1root

孩子與上面的代碼,你會得到的是一個新的config.xml文件,看起來像這樣。

<config> 
<Database> 
    <DataType>1</DataType> 
    <ServerName>192.168.50.80</ServerName> 
    // add information here supplied by the configtemplate.xml 
</Database> 

<Services> 
    <Wash>1</Wash> 
    // add information here supplied by the configtemplate.xml 
</Services> 

<Options> 
    <TaxRate>8.125</TaxRate> 
    <AskForZipcode>0</AskForZipcode> 
    // add information here supplied by the configtemplate.xml 
</Options> 

//below are from configtemplate.xml 
<Database> 
    <DataType>1</DataType> 
    <ServerName>192.168.50.80</ServerName> 
    // add all lines below to config.xml 
    <DatabaseName>TestDB</DatabaseName> 
</Database> 

<Services> 
    <Wash>1</Wash> 
    // add all lines below to config.xmlxml 
    <Greeter>0</Greeter> 
</Services> 

<Options> 
    <TaxRate>8.125</TaxRate> 
    <AskForZipcode>0</AskForZipcode> 
    // add all lines below to config.xml 
    <AutoSave>1</AutoSave> 
</Options> 
</config> 

順便說一句,在XML註釋的正確方法是一樣的HTML,這是<!--comment-->

+0

當你說我需要知道我想導入的標籤時,你可以給我一個例子。不知道你的意思是什麼xml對我來說都是新的感謝 – FantasyPC

+0

@FantasyPC我剛剛更新了我的答案。 – sora0419

+0

好吧,但最終它只是結合了兩個XML文件。我需要它來創建一個將在模板中添加額外的行,並將它們添加到原來的一種,如更新。我的目標是在不改變配置中第一行的原始值的情況下將兩者的最終產品放在一起。我真的希望我正確地解釋我的自我lol – FantasyPC