Модифицируйте и оборачивайте узлы 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)