删除元素的所有子节点和文本

时间:2010-03-03 00:22:10

标签: xml ruby rexml

使用Ruby的reXml,我有一个特定的元素,我想彻底清除它的所有子节点和文本。

我无法解决如何做到这一点。

鉴于此:

<ug>
  <oog>
    Delete<delete/>all<delete/>this
  </oog>
</ug>

我想删除oog的所有孩子,最后得到这个:

<ug>
  <oog>
  </oog>
</ug>

我可以使用以下命令删除节点:

  blah = REXML::Document.new('<ug><oog>Delete<delete/>all<delete/>this</oog></ug>')
  oog = blah.elements['//oog']
  oog.elements.delete_all '*'

  puts blah.to_s

但是这不会删除文本,所以我仍然有

<ug>
  <oog>
    Deleteallthis
  </oog>
</ug>

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

尝试做你正在做的事情,然后添加:

while node = oog.get_text
  oog.delete node
end

由于各种我不记得的原因,REXML以不同于常规元素的方式处理文本节点。