加载和保存时XML文件中的缩进
本文关键字:缩进 文件 XML 保存 加载 | 更新日期: 2023-09-27 18:00:21
我知道这个主题以前已经发表过,但我似乎不知道如何做到这一点,即使之前有关于它的所有文章。
因此,在我的代码中,我创建了一个xml文件,并用一些东西填充它。在创建并关闭文件后,代码会返回到xml代码,以编写更多内容。问题是,无论我使用何种流/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();
但现在的结果是,在创建了一个文件并对其进行了两次写入之后,文件看起来像这样:
<?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.
第2版:
如果移除"fs.SetLength(0);",效果会更好,但现在<anndata>
根元素在我第二次写入时被复制,XmlDocument在我第三次加载它进行第三次写入时清除了一个异常。
使用xml文档的方式看起来不错。尝试从文件中读取文档(并关闭文件),然后将文档作为单独的步骤保存回文件(而不是使用读/写文件并尝试在加载和保存步骤之间截断它)
除此之外,在要求保存文档之前,只需检查您是否在文档中设置了正确的格式属性。