使用nokogiri修改并包装xml节点

时间:2011-05-30 08:06:00

标签: ruby 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 个答案:

答案 0 :(得分: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)