有没有办法在文件中的特定标记之间插入一些行
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>
我正在尝试在特定位置之间插入一些线条。因此,例如,我想在 <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>