Я использую Nokogiri с Ruby для интерпретации содержимого XML-файла. Я хотел бы получить массив (или аналогичный) всех элементов, которые являются прямыми дочерними элементами <where>
в моем примере. Тем не менее, я получаю различные текстовые узлы (например, "\n\t\t\t"
), чего я не хочу. Есть ли способ удалить или игнорировать их?Получить дочерние элементы элемента без текстовых узлов
Вышеуказанные выходы сценария Ruby:
[#<Nokogiri::XML::Text:0x100344c "\n\t\t\t">, #<Nokogiri::XML::Element:0x1003350 name="username" attributes=[#<Nokogiri::XML::Attr:0x10032fc name="compare" value="e">] children=[#<Nokogiri::XML::Text:0x1007580 "Admin">]>, #<Nokogiri::XML::Text:0x100734c "\n\t\t\t">, #<Nokogiri::XML::Element:0x100722c name="rank" attributes=[#<Nokogiri::XML::Attr:0x10071d8 name="compare" value="gt">] children=[#<Nokogiri::XML::Text:0x1006cec "5">]>, #<Nokogiri::XML::Text:0x10068a8 "\n\t\t">]
Я хотел бы, чтобы каким-то образом получить следующий объект:
[#<Nokogiri::XML::Element:0x1003350 name="username" attributes=[#<Nokogiri::XML::Attr:0x10032fc name="compare" value="e">] children=[#<Nokogiri::XML::Text:0x1007580 "Admin">]>, #Nokogiri::XML::Element:0x100722c name="rank" attributes=[#<Nokogiri::XML::Attr:0x10071d8 name="compare" value="gt">] children=[#<Nokogiri::XML::Text:0x1006cec "5">]>]
В настоящее время я могу работать вокруг вопроса с использованием
c.each{|child|
if !child.text?
...
end
}
но c.length == 5
. Это сделало бы мою жизнь легче, если кто-то может предложить, как исключить прямые дочерние текстовые узлы из C, так что c.length == 2
Спасибо. Вариант 2 работает отлично. – SimonMayer