В настоящее время я использую Perl-скрипт с LibXML для обработки данного XML-файла. Это идет прилично хорошо, но если у меня есть узел с двумя дочерними узлами и свободным текстом, я начинаю бороться. Пример ввода будет:Заменить узел XML на String в Perl с помощью LibXML
<Errors>
<Error>
this node works fine
</Error>
<Error>
some text <testTag>with a node</testTag> in between
</Error>
</Errors>
Ожидаемый результат:
<Errors>
<Error>
this node works fine
</Error>
<Error>
some text HELLOwith a nodeHELLO in between
</Error>
</Errors>
Я попытался replaceChild ("HELLO", $ testTagNode); заменить узлы на строку, которую я мог бы (если нужно) продолжить с помощью простого поиска-замены, но я столкнулся с ошибкой «не блаженной ссылки». (Я чувствую, как это было бы очень грязный, если он на самом деле работает именно так.)
Если я пытаюсь запустить простой поиск замены непосредственно на родительский узел, как этот
$error=~s/\</HELLO/g;
это будет просто никогда триггер (независимо от того, я избегаю < или нет), потому что LibXML, кажется, игнорирует каждый тег, который я специально не запрашиваю; если я пытаюсь распечатать вторую ошибку он также даст мне только
some text with a node in between
который на самом деле очень хорошая функциональность для остальной части файла, но не в данном случае.
я могу сделать, однако
$error->removeChild($testTagNode);
, который показывает мне, что он на самом деле делает получить найдены, но не поможет мне в дальнейшем. Я мог бы теоретически удалить узел, сохранить содержимое, а затем просто вставить содержимое обратно в родительский; проблема в том, что она должна быть в том месте, где она была раньше. Единственное, что я, вероятно, мог бы сделать, это прочитать во всем файле как строку, позволить базовому поисковому замещению работать над ним ПЕРЕД доставкой в LibXML, но это может создать довольно большие накладные расходы и на самом деле не очень хорошее решение.
Мне кажется, что я не замечаю что-то существенное, так как это выглядит как довольно простые задачи, но я ничего не могу найти. Возможно, я просто смотрю в неправильном направлении, и есть совершенно другой подход. Любая помощь приветствуется.
Почему вы пытаетесь превратить XML-элемент в виде обычного текста в первую очередь? Это похоже на проблему XY. – Sobrique