Получить дочерние элементы элемента без текстовых узлов

Я использую Nokogiri с Ruby для интерпретации содержимого XML-файла. Я хотел бы получить массив (или аналогичный) всех элементов, которые являются прямыми дочерними элементами в моем примере. Однако Я получаю различные текстовые узлы (например, "\ n \ t \ t \ t" ), которые Я не хочу.Есть ли способ удалить или проигнорировать их?

@body = "
<xml>
  <request>
    <where>
      <username compare='e'>Admin</username>
      <rank compare='gt'>5</rank>
    </where>
  </request>
</xml>" #in my code, the XML contains tab-indentation, rather than spaces. It is edited here for display purposes.

@noko = Nokogiri::XML(@body)
xml_request = @noko.xpath("//xml/request")
where = xml_request.xpath("where")
c = where.children
p c

Вышеупомянутый сценарий Ruby выводит:

[# , # ] children = [# ]>, # , # ] children = [# ]>, # ]

Я бы хотел как-нибудь получить следующий предмет:

[# ] потомков = [# ]>, #Nokogiri :: XML :: Element: 0x100722c name = "rank" attributes = [# ] children = [# ]>]

В настоящее время я могу обойти проблему, используя

c.each{|child|
  if !child.text?
    ...
  end
}

, но c.length == 5 . Мне стало бы легче, если бы кто-нибудь мог предложить, как исключить прямые дочерние текстовые узлы из c, чтобы c.length == 2

9
задан Phrogz 14 February 2012 в 23:39
поделиться