Модифицируйте и оборачивайте узлы xml с помощью nokogiri

У меня есть XML-документ с фрагментами вроде следующего:

<x>
  abcd
  <z>ef</z>
  ghij
</x>

Я хочу найти текст "defg" внутри узла и изменить этот узел следующим образом:

<x>
  abc
  <y>
    d<z>ef</z>g
  </y>
  hij
</x>

Это означает создание нового узла с битом x.text и другими дочерними элементами внутри.

Я могу найти узел, который включает в себя текст, но я не знаю, как разбить его, и обернуть только соответствующий раздел внутри <y> теги.

Любые идеи, которые могут направить меня в правильном направлении, наиболее ценны. Благодарю.

1 ответ

Как насчет того, чтобы превратить его в укус, а затем использовать регулярное выражение, чтобы изменить его, а затем снова проанализировать его с помощью nokogiri.

sting = some_xml.to_s
# => '<x>abcd<z>ef</z>ghij</x>'

splits = sting.match(/(.)<z>(.*)<\/z>(.)/)

new_string = sting.gsub(splits[1], "<y>#{splits[1]}").gsub(splits[3], "#{splits[3]}</y>")

Nokogiri::XML(new_string)
Другие вопросы по тегам