有没有办法在文件中的特定标记之间插入一些行

Is there a way to insert some lines between specific tag in a file

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

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

输出文件

<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>

您的文件不是有效的 XML 文件。它应该有一个包含所有其他标签的 root-tag。我将其命名为 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>

如您所见,添加了 header 行,使其成为 well-formed XML-file.

试试这个 fiddle。在这里,我从标签中获取 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>