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在第三次加載第三次寫入時發出異常。
檢查這裏的好答案http://stackoverflow.com/questions/2374654/how-do-you-create-an-indented-xml-string-from-an-xdocument-in-c – 2013-02-20 16:54:24
這個問題是我對所有的讀者都很糟糕。所以我不知道如何讓代碼能夠創建一個新文件,並用縮進來寫入,並打開一個文件並用正確的縮進書寫一些文件。我現在使用的Filestream是我唯一知道如何附加和創建文件的東西。並且FileStream似乎不能很好地工作XmlTextWriter。 – Mockarutan 2013-02-20 16:59:21
嘗試考慮下面的答案並回復,如果您遇到任何問題 – 2013-02-20 17:00:40