c# 将'\n\r' 转换为'&#x13'保存 XDocument 时

问题描述

我已经为此寻找了解决方案,但我发现的只是如何防止这种情况发生的问题。

我有一个用于保存和加载 XML 的简单代码

    XDocument xDoc;

    public Form1()
    {
        InitializeComponent();
        xDoc = new XDocument(new XElement("root",new XElement("data")));
    }

    private void textBox1_TextChanged(object sender,EventArgs e)
    {
        string input = textBox1.Text;

        xDoc.Root.SetElementValue("data",input);

        rtxtXPreview.Text = xDoc.ToString();
        txtValuePreview.Text = xDoc.Root.Element("data").Value;
    }

    private void button1_Click(object sender,EventArgs e)
    {
        SaveAndLoad();
    }

    private void SaveAndLoad()
    {
        string datanodeValue;
        xDoc.Save(path);
        datanodeValue = xDoc.Descendants("data").First().Value;
        txtValuePreview.Text = datanodeValue;
        rtxtXPreview.Text = xDoc.ToString();
    }

textBox1: 是数据元素的输入。

rtxtXPreview:是用于显示 XML 文本的富文本框。

txtValuePreview:是用于显示元素值的文本框。

问题是当我输入如下值时:

A

B

C

XML 显示良好的换行符,但是一旦我点击按钮,文档就会被保存,而没有这些。所以当我调试我的代码时,我发现字符 \n\r 被替换为 \n 所以我搜索了这个问题并找到了这个 code:

    private void SaveAndLoadFixed()
    {
        string datanodeValue;

        XmlWriterSettings xmlWriterSettings =
            new XmlWriterSettings { NewLineHandling = NewLineHandling.None,Indent = true };

        using (XmlWriter xmlWriter = XmlWriter.Create(path,xmlWriterSettings))
        {
            xDoc.Save(xmlWriter);
            xmlWriter.Flush();
        }

        //xDoc.Save(path);

        XElement xDatabaseElement;
        using (XmlTextReader xmlTextReader = new XmlTextReader(path) { WhitespaceHandling = WhitespaceHandling.Significant })
        {
            xmlTextReader.MovetoContent();
            xDatabaseElement = XElement.Load(xmlTextReader);
        }

        datanodeValue = xDatabaseElement.Descendants("data").First().Value;
        txtValuePreview.Text = datanodeValue;
        rtxtXPreview.Text = xDatabaseElement.ToString();
    }

这很好用,但是为什么字符 \n\r 没有替换为 &#x13&#x10; 因为当我尝试输入字符 <> 时它被替换为 {{1} } & &lt; 分别是?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)