【问题标题】:XDocument automatically indents files on parse and does not remove indent on saveXDocument 在解析时自动缩进文件,并且在保存时不删除缩进
【发布时间】:2013-08-12 21:39:07
【问题描述】:

我正在寻求有关使用 XDocument(不是 XMLDocument)保存 XML 文件的帮助。

所以我有一个没有缩进的 xml 文件(实际上它是 1 行)。当我使用 XDocument.Parse 将其读取到 XDocument 时(在使用 StreamReader 读取和存储字符串之后),生成的 XDocument 会缩进。

好吧,我想只要我可以将它保存回文件而不缩进就可以了。然而,即使我有

XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.NewLineOnAttributes = false;
writerSettings.NewLineHandling = NewLineHandling.None;
writerSettings.Indent = false;

并在我创建 XmlWriter 时将其传入

using (var writer = XmlWriter.Create(u.ToFileSystemPath(), settings))
{
    xd.Save(writer);
}

生成的 XML 文件仍然有缩进。当我在 Visual Studio 上调试时,我注意到 writer 是一个类 XmlWellFormedWriter。这和我的结果有关系吗?任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 我无法重现这个......当使用XDocument.Parse(...) 解析然后使用您提供的代码保存时,它对我来说很好。你能制作一个简短但完整的程序来演示这个问题吗?
  • 上面的代码为你保存了一个没有缩进的 XML 文件?
  • 是的,此代码在删除所有具有 LoadOption.PreserveWhiteSpace 的位置后有效

标签: c# xml visual-studio linq-to-xml indentation


【解决方案1】:

SaveOptions 在Save()ToString() 上可用。

    string xmlstring = 
@"<Top>
    <First>1</First>
    <Second>Dude</Second>
    <Third>Now</Third>
</Top>";

    XDocument doc = XDocument.Parse(xmlstring);
    doc.Save(@"C:\temp\noIndet.xml", SaveOptions.DisableFormatting);
        // string noIndent = doc.ToString(SaveOptions.DisableFormatting);

输出:

【讨论】:

  • 我的目标是将文件保存回 XML 文档。因此,仅使用不缩进的字符串并不能真正实现我的目标。当我从缓冲区读取时,我确实有非缩进字符串。谢谢。
  • @publicst119 我更新了代码以向您展示如何执行保存。
  • hmmm... 调试器点击保存的那一刻,因为 Parse 结果中存在缩进(在 XDocument 中),保存的文件将返回缩进。这很奇怪。我确保没有扩展方法或任何东西,但仍然没有结果。现在你之前建议的string tepm = xd.ToString(SaveOptions.DisableFormatting); 也有缩进。
  • herm 在我使用 .Parse 之后,字符串变得不缩进。但是,当我最后使用它时,它不会。中间必须有代码强制它保存这些缩进。
  • 果然...有一个位置有 LoadOptions.PreserveWhiteSpace。感谢您的麻烦,但之后它肯定有效。
猜你喜欢
  • 2014-06-26
  • 2019-03-14
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多