0

我有代码,我在其中将新节点添加到 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# 不可能做到这一点,请告诉我(我只相信明显的专家用户)。

请回复!谢谢。

4

1 回答 1

1

冒着重复您在其他地方可能被告知的内容的风险,您不能仅通过保存 XmlDocument 来做到这一点。您可以尝试使用 XmlTextWriter:

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

...但我不确定这是否会为您提供您正在寻找的非常具体的布局。

<ROW>或者您可以将整个文档作为字符串获取(使用 yourDocument.OuterXml),然后使用普通字符串匹配(可能是最好的 REGEX)来删除所有回车符,节点之前和之后的回车符除外。

请记住,这些都不会对您的文件结构产生任何实际影响——这只是格式化的一种情况。

于 2012-08-28T17:40:22.053 回答