Страницы

Поиск по вопросам

понедельник, 23 декабря 2019 г.

Заменить текст в xml на заданный

#c_sharp #xml


Есть файл xml который имеет вид :



    Xml has been renamed to New Xml
    Test has been renamed to Xml
    Xml has been renamed to Xml
    XmlXml has been renamed to New Xml
    Xml has been renamed to Xml



Нужно заменить добавить до всех слов Xml, слово New

Делаю так: 

string prefix = "New";
string word = "Xml";
string regexPattern = $@"(? и xml становится в виде: 


New Xml has been renamed to New XmlTest
has been renamed to XmlNew Xml has been renamed to XmlXmlNew Xml has been renamed to
New XmlNew Xml has been renamed to New Xml


Что я делаю не так? В чем моя ошибка?
    


Ответы

Ответ 1



xdoc.Descendants() возвращает первым элементом корень всего документа, т.е. тег test со всем его содержимым. Свойство XElement.Value: Возвращает или задает сцепленное текстовое содержимое этого элемента. Поэтому вы первой же итерацией просто уничтожаете все вложенные теги. Всё, дальше итераций не будет. Починить можно так: foreach (var node in xdoc.Root.Descendants()) или так: foreach (var node in xdoc.Descendants("line1")) Цикл по атрибутам надо будет вынести отдельно. Еще один вариант (без правки заголовка цикла) — пропускать элементы, имеющие дочерние элементы: if (!node.HasElements) node.Value = Regex.Replace(node.Value, regexPattern, replacement); Тогда цикл по атрибутам можно оставить внутри. (правильность самой регулярки не проверял)

Комментариев нет:

Отправить комментарий