Удаление всех дочерних узлов и текста элемента - PullRequest
0 голосов
/ 03 марта 2010

В reXml с использованием Ruby у меня есть определенный элемент, и я хочу полностью очистить все его дочерние узлы и текст.

Я просто не могу понять, как это сделать.

Учитывая это:

<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 Ответ

3 голосов
/ 03 марта 2010

Попробуйте сделать то, что вы уже делаете, затем добавьте:

while node = oog.get_text
  oog.delete node
end

REXML обрабатывает текстовые узлы иначе, чем обычные элементы, по разным причинам, которые я не могу вспомнить.

...