2012-08-28 69 views
0

我有代碼,我添加新的節點到一個XML文件,它的工作原理是完美的,但有一個問題,當我保存更改添加更改xml文件的原始結構。如何在不丟失原始結構的情況下添加XML節點?

原來的文件有一個完整的一行或一排像這樣每個節點:

<DATA> 
    <ROW><mk v = "2801"/><gd v = "170300"/><wn v = "00Y6354"/><bn v = ""/></ROW> 
    <ROW><mk v = "2801"/><gd v = "170301"/><wn v = "00Y6355"/><bn v = ""/></ROW> 
    <ROW><mk v = "2801"/><gd v = "170302"/><wn v = "00Y6356"/><bn v = ""/></ROW> 
</DATA> 

但添加新節點並保存更改後,結構是這樣的:

<DATA> 
    <ROW> 
     <mk v = "2801"/> 
     <gd v = "170300"/> 
     <wn v = "00Y6354"/> 
     <bn v = ""/> 
    </ROW> 
    <ROW> 
     <mk v = "2801"/> 
     <gd v = "170301"/> 
     <wn v = "00Y6355"/> 
     <bn v = ""/> 
    </ROW> 
    <ROW> 
     <mk v = "2801"/> 
     <gd v = "170302"/> 
     <wn v = "00Y6356"/> 
     <bn v = ""/> 
    </ROW> 
    <ROW> 
     <mk v = "2341"/> 
     <gd v = "170342"/> 
     <wn v = "00Y9872"/> 
     <bn v = "new node"/> 
    </ROW> 
</DATA> 

我已經試圖找到像第一個結構一樣的FINAL OUTPUT的例子,但沒有。所以有可能保存更改而不改變原來的結構有人告訴我請!

我的代碼是這樣的:

public void CreateXML(string[] ipRow, string ipFile) 
    { 
     XmlDocument doc = new XmlDocument(); 
     XmlDocument xmlDoc = new XmlDocument(); 
     xmlDoc.Load(ipFile); 

     for (int j = 0; j < ipRow.Length; j++) 
     { 
      doc.LoadXml(ipRow[j]); 
      XmlNode newNode = doc.DocumentElement; 
      XmlNode copiedNode = xmlDoc.ImportNode(newNode, true); 
      xmlDoc.DocumentElement.LastChild.AppendChild(copiedNode);     
     } 
     xmlDoc.Save(ipFile); 
    } 

我只是想申請某種形式的,或者至少表明該方案尊重的什麼已經是該文件的內部原有結構。 我發現論壇,他們說你可以使用StringBuilders,XmlWriterSettings和東西,但不起作用,正如你所看到的,新節點來自一個字符串,所以,我不能改變方式新節點已創建,代碼必須保持原樣,並且只需添加規則即可保留原始格式。

或者如果有人知道在Visual Studio 2008上用C#做這件事是不可能的,那就告訴我(我只會信任明顯的專家用戶)。

請回復!謝謝。

+0

可能的重複http://stackoverflow.com/questions/8589592/preserve-xml-formatting-using-xmldocument – jpe

+0

我已經嘗試了preservewhitespace的東西,它不起作用,結果是someting像這樣: 只有一行A LL XML代碼,我不是那個 –

+0

爲什麼你需要這種特殊的格式?格式在XML文件中非常重要。 – JcFx

回答

1

在重複您可能已被告知其他地方的風險時,您不能通過簡單地保存您的XmlDocument來完成此操作。您可以嘗試使用一個XmlTextWriter:

using (var xmlWriter = new XmlTextWriter(filePath, Encoding.UTF8)) 
{ 
    xmlWriter.Formatting = Formatting.None; 
    yourDocument.WriteTo(xmlWriter); 
} 

...但我不知道這會給你你正在尋找的非常具體的佈局。

或者您可以將整個文檔作爲字符串(使用yourDocument.OuterXml),然後使用普通的字符串匹配(REGEX可能是最好的)來刪除所有回車,但在<ROW>節點之前和之後除外。

請記住,這不會對您的文件結構產生任何實際影響 - 這只是格式化的一種情況。

相關問題