我有代码,我将新节点添加到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>
我试图找到像第一个结构一样的最终输出的一些例子,但没有。所以有可能保存更改而不改变有人告诉我的原始结构!
我的代码是这样的:
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 :(得分:1)
冒着重复你在其他地方被告知的风险,你不能简单地通过保存你的XmlDocument来做到这一点。您可以尝试使用XmlTextWriter:
using (var xmlWriter = new XmlTextWriter(filePath, Encoding.UTF8))
{
xmlWriter.Formatting = Formatting.None;
yourDocument.WriteTo(xmlWriter);
}
...但我不确定这是否会为您提供您正在寻找的非常具体的布局。
或者您可以将整个文档作为字符串(使用yourDocument.OuterXml)然后使用正常的字符串匹配(REGEX可能是最好的)来删除所有回车,除了<ROW>
节点之前和之后的回车
请记住,这些都不会对文件结构产生任何实际影响 - 这只是格式化的一种情况。