Я пытаюсь вставить несколько строк между определенным местом. Так, например, я хотел добавить Test между <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? Используйте XDocument
вместо StreamWriter
, и вы можете вставлять текст где угодно.
Не анализируйте и не изменяйте эти структурированные данные вручную. Если это XML, используйте встроенные библиотеки фреймворка. Если это HTML, используйте HtmlAgilityPack.
@DourHighArch Да, это XML. Я воспользуюсь XDocument
Ваш файл не является допустимым 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-файлом.
Спасибо, я не добавил полный XML-файл. Какую бы строчку ни предполагалось добавить в этот пост, я добавил только эту часть.
Попробуйте эту скрипку. Здесь я получаю 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>
То, что вы ищете, - это создать синтаксический анализатор XML (или использовать существующие / сторонние библиотеки). Обратитесь к это для этого