Никогда, никогда не используйте манипуляции со строками для создания XML. Это не просто заставляет плохо социализированных людей смеяться над вами: это приводит к коду, в котором есть ошибки, о которых вы даже не подозреваете.
Подумайте об этом с точки зрения теста. Вы написали метод, который использует манипуляции со строками для генерации XML. Хорошо, теперь напишите для него тестовый пример, который продемонстрирует, что он никогда не будет генерировать плохо сформированный XML. Чтобы тест подтвердил это, вы должны протестировать каждый возможный сценарий, описанный в рекомендации XML. Знаете ли вы рекомендации XML достаточно хорошо, чтобы утверждать, что ваш тест делает это?
Нет, нет. И вы на самом деле этого не хотите, если только вы не пишете каркас для генерации XML. Вот почему вы используете классы в System.Xml
для генерации XML. Люди, которые их написали, сделали эту работу, чтобы вам не пришлось.
Томалак показал, как делать то, что вы пытаетесь делать с XSLT. Если вы используете XmlWriter
для генерации XML, используйте этот шаблон:
string s = "replace\nnewlines\nwith\nbreaks";
string[] lines = s.Split('\n');
for (int i=0; i<lines.Length; i++)
{
xw.WriteString(lines[i]);
if (i<lines.Length - 1)
{
xw.WriteElementString("br", "", "");
}
}
Здесь используются операции со строками, где это уместно - при работе со строковыми данными вне XML, - и не там, где это не так - при создании текста XML.