2009-10-26 36 views
0

這兩個文件中的所有內容假設我有兩個XML文件。C# - 合併XML文件,但保留包含版本號

第一個XML文件:

<?xml version="1.0"?> 
    <AccessRequest xml:lang="en-US"> 
     <AccessLicenseNumber>Your_License</AccessLicenseNumber> 
     <UserId>Your_ID</UserId> 
     <Password>Your_Password</Password> 
    </AccessRequest> 

二XML文件:

<?xml version="1.0"?> 
    <RatingServiceSelectionRequest xml:lang="en-US"> 
    <CustomerContext>Rating and Service</CustomerContext> 
    </RatingServiceSelectionRequest> 

現在,當我將它們合併二,我想輸出是這樣的:

<?xml version="1.0"?> 
<AccessRequest xml:lang="en-US"> 
    <AccessLicenseNumber>Your_License</AccessLicenseNumber> 
    <UserId>Your_ID</UserId> 
    <Password>Your_Password</Password> 
</AccessRequest> 
<?xml version="1.0"?> 
<RatingServiceSelectionRequest xml:lang="en-US"> 
    <CustomerContext>Rating and Service</CustomerContext> 
</RatingServiceSelectionRequest> 

當我我正在使用谷歌上的常用方法合併這兩個文件,版本號等正在被吃掉並且RatingServiceSelectionRe任務節點最終成爲AccessRequest節點的一部分,這顯然不是我想要的。

如何在C#.Net中處理此問題?

注意:我想這樣做的原因是因爲我使用的這個API是這樣請求的,所以我猜沒有兩種方法。

回答

4

不能有兩個頂級節點

<AccessRequest>

<RatingServiceSelectionRequest>

在一個良好的XML文件 - 這是通過定義 - 一個格式良好的XML文件有一個,正好一個根節點。

此外,在一個文件中不能有兩個XML處理指令<?xml version="1.0"?> - 當然不是在文件中間。因此,您需要引入一個新的「人造」根,或者在另一個根元素或其他東西下面粘貼XML。

如果你真的必須保持這種格式,那麼你只要將兩者連接起來文件作爲字符串:

string file1Contents = File.ReadAllText(@"file1.xml"); 
string file2Contents = File.ReadAllText(@"file2.xml"); 

File.WriteAllText(@"merged.xml", file1Contents + file2Contents); 

這裏沒有神奇的XML ....

0

的的的「損失」 xml頭(btw典型地是所需的功能),可能是使用XML/DOM感知方法進行合併的結果。相反,只需將文件作爲純文本讀取,然後依次寫入。

正如馬克s指向的,這將導致一個無效的XML文件,但如果這就是你想要什麼/需要...

在重新閱讀的問題,「投訴」有關的內容第二個文件插入到前一個文件的節點末尾,提示您希望保留一個有效的XML文件,儘管第二個文件中的數據未集成到此節點中。因此,您將明確需要引入一個額外節點作爲組合結果的根節點。 (目前這些文件都有自己的根元素)。

0

這個API看起來很熟悉;)

在這裏,我們使用相同的,他們確實需要一個接一個的權利。我假設你也使用隨API提供的.xsd來生成你的請求類。我們創建了一個「助手」類,它將兩個請求(訪問和速率)串行化爲一個字符串,並將字符串連接並將結果作爲字節數組發佈到目標網址。

我們類的突破是:

Helper類 - >序列化的對象,並返回它作爲一個字符串(在這種情況下,一個XML字符串)

Client類 - >創建一個字節數組,其是通過WebRequest發佈到目標系統。