【问题标题】:How to insert string from Richtextbox into XML File in C# Winform如何在 C# Winform 中将 Richtextbox 中的字符串插入 XML 文件
【发布时间】:2017-07-18 11:18:49
【问题描述】:

我将 xml 代码放入 RichTextBox 中,用户可以在程序运行时在此处进行更改。我想在创建过程中将RichTextBox 的内容保存在 xml 文件中。

注意: 我已经在创建一个 xml 文件。我想在创建过程中将RichTextBox 的内容保存到 xml 文件中。

saveFileDialog1.Filter = "XML files(.xml)|*.xml|all Files(*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.ShowDialog();


if (saveFileDialog1.FileName != "")
{
    gridView1.AddNewRow();
    XmlDocument document = new XmlDocument();

    XmlElement anaeleman = document.CreateElement("onbase-certificate");

    //i want to do it here
    TextWriter yaz = new StreamWriter(saveFileDialog1.FileName,true);
    yaz.Write(f2.richTextBox1.Text);
    yaz.Close();

    XmlElement alteleman = document.CreateElement("licences");
    for (int i = 0; i < Convert.ToInt32(gridView1.DataRowCount); i++)
            {

                XmlElement elemanlar = document.CreateElement("licence");

                XmlElement eleman = document.CreateElement("name");
                eleman.InnerText = "![CDATA[" + gridView1.GetRowCellValue(i, "productname").ToString() + "]";
                elemanlar.AppendChild(eleman);

                eleman = document.CreateElement("code");
                eleman.SetAttribute("sig", "1");
                eleman.InnerText = gridView1.GetRowCellValue(i, "producttype").ToString();
                elemanlar.AppendChild(eleman);

                eleman = document.CreateElement("count");
                eleman.InnerText = gridView1.GetRowCellValue(i, "count").ToString();
                eleman.SetAttribute("sig", "1");
                elemanlar.AppendChild(eleman);

                if (gridView1.GetRowCellValue(i, "pilotdate").ToString() != "")
                {
                    eleman = document.CreateElement("pilotdate");
                    eleman.InnerText = gridView1.GetRowCellValue(i, "pilotdate").ToString();
                    eleman.SetAttribute("sig", "1");
                    elemanlar.AppendChild(eleman);
                }

                alteleman.AppendChild(elemanlar);

            }
    //anaeleman.AppendChild(alteleman);

    anaeleman.AppendChild(alteleman);

    document.AppendChild(anaeleman);

    document.Save(saveFileDialog1.FileName);
}

【问题讨论】:

  • 为什么要用 yaz.Write(...) 将 Richtextbox 内容写入 saveFileDialog1.FileName 然后用 document.Save(saveFileDialog1.FileName) 重写?
  • 因为我无法插入 yaz.Write(...) XMLelement 所以试图在创建 xml 文件后保存代码

标签: c# xml winforms savefiledialog


【解决方案1】:

您可以使用普通的StringBuilder,而不是使用 XmlDocument。

var builder = new StringBuilder();
builder.AppendLine("<onbase-certificate>");
builder.AppendLine(f2.richTextBox1.Text);

builder.AppendLine("<licenses>");
for (int i = 0; i < Convert.ToInt32(gridView1.DataRowCount); i++)
        {

            builder.AppendLine("<license>");
            builder.AppendLine("<name>![CDATA[" + gridView1.GetRowCellValue(i, "productname").ToString() + "]</name>");

           builder.AppendLine("<code sig=\"1\">");
           builder.AppendLine(gridView1.GetRowCellValue(i, "count").ToString(););
           builder.AppendLine("</code>");

            // ...


           builder.AppendLine("</license>");

        }
builder.AppendLine("</licenses>");

builder.AppendLine("</onbase-certificate>");
File.WriteAllText(saveFileDialog1.FileName, builder.ToString());

【讨论】:

  • 谢谢,但我也记录了来自 DataControl 的信息,所以我必须使用 XmlDocument
  • DataControl 是否绑定到 xmlDocument?使用 StringBuilder,您可以添加任意数量的信息,也可以嵌套。
  • 我编辑了我的代码:插入了数据网格部分。请看
  • 当您可以轻松地使用 XML 库时,手动构建 XML 确实是个坏主意。一方面,XmlDocument 将处理所有特殊字符的转义和格式化。这对于避免“XML 注入”特别重要(因为没有更好的术语)。
  • 所以?你有什么建议?
【解决方案2】:

我不确定你想做什么。您想将richtextbox 中的文本保存到xml 元素anaeleman 吗?如果是,您是否尝试过:?

anaeleman.InnerText = f2.richTextBox1.Text

【讨论】:

  • 没有。我想将 Richtextbox 中的文本保存到 xml 文件(现有文件)。
猜你喜欢
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多