有没有一种方法可以在文件中的特定标签之间插入一些行

时间:2018-10-04 21:14:09

标签: c# streamwriter

我正在尝试在特定位置之间插入一些行。因此,例如,我想在<ID_1> ... </ID_1>之间添加Test。如何添加它,使用后我想删除它,以便下次运行时输入新数据。到目前为止,我知道如何添加,但是我要输入文件的最后一行。

using (StreamWriter stream = File.AppendText(filename))
{
    stream.WriteLine("line1");
    stream.WriteLine("line2");
    stream.WriteLine("line3");
}

OutputFIle

<ID_1>

</ID_1>

<ID_2>

</ID_2>

<ID_3>

</ID_3>

<ID_4>

</ID_4>

预期产量

<ID_1>
line1
line2
line3
</ID_1>

<ID_2>

</ID_2>

<ID_3>

</ID_3>

<ID_4>

</ID_4>

2 个答案:

答案 0 :(得分:1)

您的文件不是有效的XML文档。它应该有一个包含所有其他标签的根标签。我将其命名为root,但可以使用其他任何名称。

<root>
  <ID_1></ID_1>
  <ID_2></ID_2>
  <ID_3></ID_3>
  <ID_4></ID_4>
</root>

然后您可以执行以下操作:

var doc = XDocument.Load(filename);
doc.Root.Element("ID_1").Value = "line1\r\nline2\r\nline3";
doc.Save(filename);

它将创建一个看起来像这样的文件

<?xml version="1.0" encoding="utf-8"?>
<root>
  <ID_1>line1
line2
line3</ID_1>
  <ID_2></ID_2>
  <ID_3></ID_3>
  <ID_4></ID_4>
</root>

如您所见,添加了标题行,使其成为格式正确的XML文件。

答案 1 :(得分:0)

尝试这个小提琴。在这里,我得到了id标签,并使用了一些伪造的id检索方法

public static void Main()
{
    var xml = @"<doc><ID_1>
     </ID_1>
     <ID_2>
     </ID_2>
     <ID_3>
     </ID_3></doc>";

    XElement el = XElement.Parse(xml);
    foreach (var e in el.Elements())
    {
        var id = e.Name.LocalName.Split('_')[1];
        e.Value = GetLinesById(id);
    }
    Console.WriteLine(el.ToString());
}

private static string GetLinesById(string id)
{
    var sb = new StringBuilder();
    if (id == "1")
    {
        sb.AppendLine("Line 1");
    }
    else if (id == "2")
    {
        sb.AppendLine("Line 1");
        sb.AppendLine("Line 2");
    }
    else if (id == "3")
    {
        sb.AppendLine("Line 1");
        sb.AppendLine("Line 2");
        sb.AppendLine("Line 3");
    }

    return sb.ToString();

}

}

  

<doc> <ID_1>Line 1 </ID_1> <ID_2>Line 1 Line 2 </ID_2> <ID_3>Line 1 Line 2 Line 3 </ID_3> </doc>