2013-02-20 149 views
0

我知道這個主題已經出來,但我似乎無法弄清楚如何做到這一點,即使所有以前的帖子都是這樣。在加載和保存XML文件時的縮進

所以在我的代碼中,我創建並填充了一些xml文件。代碼返回到已創建並關閉的文件的xml代碼,以便寫入更多內容。問題是無論我使用什麼stream/xml讀寫器的組合,縮進在文本中的某處都會變得很奇怪。

下面是代碼:

XmlDocument xml = new XmlDocument(); 
xml.PreserveWhitespace = true; 
XmlElement root = null; 

FileStream fs = null; 

if (File.Exists(fileName)) 
{ 
    fs = new FileStream(fileName, FileMode.Open, FileAccess.ReadWrite); 

    xml.Load(fs); 
    if (xml.GetElementsByTagName("anndata").Count > 0) 
     root = (XmlElement)xml.GetElementsByTagName("anndata").Item(0); 
} 
else 
{ 
    fs = new FileStream(fileName, FileMode.CreateNew, FileAccess.ReadWrite); 
    root = xml.CreateElement("anndata"); 
    xml.AppendChild(root); 
} 

    //some writing to the xml doc. 

fs.SetLength(0); 
xml.Save(fs); 
fs.Close(); 

現在一切都在一行中的XML文件,我會喜歡一些縮進,所以任何提示?

編輯:

我改變了最後一位這樣:

fs.SetLength(0); 
XmlTextWriter writer = new XmlTextWriter(fs, Encoding.Unicode); 
writer.Formatting = Formatting.Indented; 
xml.Save(writer); 
writer.Close(); 
fs.Close(); 

但現在經過1個創建文件和另外兩個作品給它的結果是,文件看起來喜歡這樣的:

<?xml version="1.0" encoding="utf-16"?> 


<anndata> 
    <ann name="test1"> 
    <weights> 
     <weight node1="7" node2="8" weight="-0.5699342" /> 
     <weight node1="3" node2="8" weight="-0.2840658" /> 
     <weight node1="0" node2="10" weight="-0.03812337" /> 
     <weight node1="7" node2="10" weight="0.2714444" /> 
     <weight node1="3" node2="10" weight="-0.2163633" /> 
     <weight node1="0" node2="2" weight="0.8593098" /> 
     <weight node1="7" node2="2" weight="-0.5274166" /> 
     <weight node1="3" node2="2" weight="-0.1043958" /> 
     <weight node1="8" node2="1" weight="0.5244942" /> 
     <weight node1="10" node2="1" weight="0.7568867" /> 
     <weight node1="2" node2="1" weight="0.7543423" /> 
     <weight node1="8" node2="5" weight="-0.1524385" /> 
     <weight node1="10" node2="5" weight="-0.09445882" /> 
     <weight node1="2" node2="5" weight="-0.2441895" /> 
     <weight node1="8" node2="11" weight="0.5473043" /> 
     <weight node1="10" node2="11" weight="-0.1439976" /> 
     <weight node1="2" node2="11" weight="0.1768849" /> 
     <weight node1="0" node2="1" weight="-0.4702233" /> 
    </weights> 
    </ann> 
<ann name="test1"><weights><weight node1="7" node2="8" weight="-0.5699342" /><weight node1="3" node2="8" weight="-0.2840658" /><weight nod.... //no new lines here. 

EDIT2:

如果刪除 「fs.SetLength(0);」它的效果更好,但現在<anndata>根元素在我第二次寫入時被複制,並且XmlDocument在第三次加載第三次寫入時發出異常。

+0

檢查這裏的好答案http://stackoverflow.com/questions/2374654/how-do-you-create-an-indented-xml-string-from-an-xdocument-in-c – 2013-02-20 16:54:24

+0

這個問題是我對所有的讀者都很糟糕。所以我不知道如何讓代碼能夠創建一個新文件,並用縮進來寫入,並打開一個文件並用正確的縮進書寫一些文件。我現在使用的Filestream是我唯一知道如何附加和創建文件的東西。並且FileStream似乎不能很好地工作XmlTextWriter。 – Mockarutan 2013-02-20 16:59:21

+0

嘗試考慮下面的答案並回復,如果您遇到任何問題 – 2013-02-20 17:00:40

回答

0

你試圖用xml文檔來做這件事的方式看起來很好。嘗試從文件中讀取文檔(並關閉文件),然後將文檔作爲單獨步驟保存迴文件(而不是使用讀/寫文件並試圖在加載和保存步驟之間截斷它)

除此之外,只需檢查您是否在要求保存之前在文檔中設置了正確的格式屬性。