Единственное преимущество, которое я вижу в этом, - это то, что документ XML действителен.
Текущий метод будет более читабельным, чем этот, и намного быстрее, поскольку я создаю около 1500 документов.
Мне кажется, что при разработке процесса, который генерирует 1500 XML-документов, гарантия того, что весь вывод на самом деле является правильно сформированным XML, не является тривиальным преимуществом.
Предполагается, что типичный элемент, содержащий один из символов, который вы хотите заменить, выглядит примерно так:
<element>$symbol</element>
вы можете иметь дело с заменами следующим образом:
XmlDocument skeleton = new XmlDocument();
skeleton.Load(inputPath);
foreach (XmlElement elm in skeleton.SelectNodes("//*[starts-with(., '$')]"))
{
elm.InnerText = GetValue(elm.InnerText);
}
skeleton.Save(outputPath);
Вы могли бы сделать то же самое с XmlReader
и XmlWriter
, что даст код, который быстрее, хотя и не такой компактный.
Дополнительное преимущество этого подхода перед использованием Regex.Replace
: он делает только два прохода через XML-файл скелета, один раз для его анализа и один раз для его поиска. Если вы используете регулярное выражение, вы будете искать скелетный XML от начала до конца один раз для каждого заменяемого значения.