【问题标题】:Writing in xml does not keep the formatting?用xml写不保持格式?
【发布时间】:2015-10-01 18:22:15
【问题描述】:

我有这个字符串:

<test>I am a test</test>

但是当我将它写入我的 xml 文件并打开它时,我有这个:

&lt;test&gt;I am a test&lt;/test&gt;

我不知道如何使用良好的格式。我尝试了 HttpUtility.HtmlDecode,但它并没有解决我的问题。

你对此有什么想法吗?

编辑:抱歉之前没有发布我的代码,我认为我的问题真的很微不足道。这是我刚刚写的恢复情况的示例(我不再工作,所以我没有原始代码):

XmlDocument xmlDoc = new XmlDocument();
doc.LoadXml("<root>" +
            "<test>I am a test</test>" +
            "</root>");
string content = xmlDoc.DocumentElement.FirstChild.InnerXml;

XDocument saveFile = new XDocument();
saveFile = new XDocument(new XElement("settings", content));
saveFile.Save("myFile.xml");

我只希望我的 xml 文件内容看起来像我的原始字符串, 所以在我的情况下,该文件通常包含:

<settings>
    <root>
        <test>I am a test</test>
    </root>
</settings>

对吗?但相反,我有类似的东西:

<settings>&lt;root&gt;&lt;test&gt;I am a test&lt;/test&gt;&lt;/root&gt;
</settings>

【问题讨论】:

  • 写xml文件的代码在哪里?
  • 您实际上没有问题。 XML 文件中的文本必须进行 XML 转义。
  • 它的工作方式与您编写的代码一样,但它在哪里?
  • 请显示完整的 XML 文件,说明它当前的外观以及您期望它的外观。
  • 应该作为stackoverflow.com/questions/179173/…的副本关闭...

标签: c# xml formatting


【解决方案1】:

您可以按照Converting XDocument to XmlDocument and vice versa 的方式执行一些操作,将您的XmlDocument 的根元素转换为XElement,然后将其添加到您的XDocument

public static class XmlDocumentExtensions
{
    public static XElement ToXElement(this XmlDocument xmlDocument)
    {
        if (xmlDocument == null)
            throw new ArgumentNullException("xmlDocument");

        if (xmlDocument.DocumentElement == null)
            return null;

        using (var nodeReader = new XmlNodeReader(xmlDocument.DocumentElement))
        {
            return XElement.Load(nodeReader);
        }
    }        
}

然后按如下方式使用:

        // Get legacy XmlDocument
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml("<root>" +
                    "<test>I am a test</test>" +
                    "</root>");

        // Add its root element to the XDocument
        XDocument saveFile = new XDocument(
            new XElement("settings", xmlDoc.ToXElement()));

        // Save
        Debug.WriteLine(saveFile.ToString());

输出是:

<settings>
  <root>
    <test>I am a test</test>
  </root>
</settings>

请注意,这避免了将 XmlDocument 转换为 XML 字符串并从头开始重新解析它的开销。

【讨论】:

  • 你救了我。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 2016-03-11
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多