Używam Nokogiri z Ruby do interpretowania zawartości pliku XML. Chciałbym uzyskać tablicy (lub podobne) wszystkich elementów, które są bezpośrednie dzieci <where>
w moim przykładzie. Jednak otrzymuję różne węzły tekstowe (np. "\n\t\t\t"
), których nie chcę. Czy istnieje sposób, w jaki mogę je usunąć lub zignorować?Pobieranie elementów elementu bez węzłów tekstowych
PowyŜsze Ruby wyjścia skryptu:
[#<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">]
Chciałbym jakoś uzyskać następujący obiekt:
[#<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">]>]
Obecnie mogę obejść ten problem używając
c.each{|child|
if !child.text?
...
end
}
ale c.length == 5
. Byłoby moje życie łatwiejsze, jeśli ktoś może sugerować, jak wykluczyć bezpośrednie węzły tekstowe dziecko od c, tak że c.length == 2
Dzięki. Opcja 2 wydaje się działać doskonale. – SimonMayer