【问题标题】:How to write all children of a root of XMLDocument to an XML file如何将 XMLDocument 根目录的所有子项写入 XML 文件
【发布时间】:2015-01-21 11:49:21
【问题描述】:

我只想写根节点。 我试过了

File.WriteAllText(@"C:\Users\ah0145085\Desktop\Merged1.xml", m_XmlDocument.DocumentElement.InnerXML);

但在这种情况下,我没有得到格式化的 xml 文件

【问题讨论】:

  • 试试,m_XmlDocument.DocumentElement.OuterXml
  • 根据定义,一个 XML 文件只能有一个根。您的标题暗示您想将“所有子项”写入 XML 文件。这意味着多个根节点,或者换句话说,一个不是 XML 的文件。在你的问题中,你说的是完全不同的东西。 “我只想写根节点”。在 XML 文件中找不到“根节点s”。只有一个。 “根节点”和“根的所有子节点”之间存在差异。是哪一个?
  • 对不起,我写错了“我只想写根节点”我的问题是我想写一个根节点的所有子节点,即生成的 xml 将包含多个没有父节点的子节点(我知道生成的文件将不是有效的 xml,因为它不会包含任何仅根的子节点)

标签: c#


【解决方案1】:
  1. 要仅写入根注释,您可以从 XmlDocument 中删除节点,然后保存:
m_XmlDocument.Element("RootNode").Elements().Remove();
m_XmlDocument.Save(@"c:\temp\output.xml");
  1. 要仅写入子节点,您可以通过从 Xml 中删除根节点并将其附加到字符串来实现。已回答here,您可以这样做:
StringBuilder sb = new StringBuilder();
doc.Root.Elements().ToList().ForEach(x => sb.Append(x.ToString()));
string xmlWithoutRootNodes = sb.ToString();
File.WriteAllText("file", xmlWithoutRootNodes);

我希望这能回答你的问题。

【讨论】:

  • 我只想写子节点...所以方法 2 对我有好处。但是在这里,我们使用的是 XDocument 而不是 XmlDocument。那么您能否提供使用 XmlDocument 的代码。
  • 我想应该是这样的:doc.Descendants().ToList().ForEach(x => sb.Append(x.Value));
  • 使用 XmlDocument,我试过了,doc.Descendants().ToList().ForEach(x => sb.Append(x.Value));但我得到 x.Value = null
  • 使用XmlDocument,我也试过,doc.DocumentElement.ChildNodes.ToList().ForEach(x => sb.Append(x.Value));但我得到 x.Value = null
  • 使用 XmlDocument,我也尝试过,XmlNodeList list = doc.DocumentElement.ChildNodes foreach(XmlNode node in list) { sb.Append(node.value)} 但在这里我在节点中得到 null。价值
猜你喜欢
  • 2020-07-15
  • 2020-06-30
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 2013-01-19
  • 1970-01-01
相关资源
最近更新 更多