我得到了这个相当多的XML文件,需要使用Nokogiri解析它并使用Ruby 2.3.1进行处理,并生成一个数组,以便我可以显示嵌套链接的菜单。
所以我的想法就是拥有一个这样的菜单:
Africa
South Africa
Cape Town
Table Mountain National Park
Free State
Bloemfontein
...
Sudan
Eastern Suda
...
Swaziland
我能够解析XML并导航获取这样的节点:
xml_doc.xpath('//node_name')
.map {|n| { name: n.text,
atlas_node_id: n.parent['atlas_node_id'],
ethyl: n.parent['ethyl_content_object_id'] } }
这只是生成和散列数组,但是以一种扁平的方式,我很难制作一个数组,我可以在我的视图中迭代并获得所需的结果。任何指针都将非常感谢!
答案 0 :(得分:1)
您可以使用递归函数来处理该结构。
之类的东西require 'nokogiri'
require 'open-uri'
# Fetch and parse XML document
doc = Nokogiri::XML(open('https://pastebin.com/raw/nD0b7H3u'))
# we have a revursive function that prints the xml by levels
def parse_menu(xml, level)
level+=1
xml.xpath("node").each do |menu_item|
puts "#{" " * level}#{menu_item.xpath("node_name").text}"
parse_menu(menu_item, level)
end
end
# we call the function
parse_menu(doc.xpath('taxonomies/taxonomy'), -1)
这将打印如下:
Africa
South Africa
Cape Town
Table Mountain National Park
Free State
Bloemfontein
Gauteng
Johannesburg
Pretoria
KwaZulu-Natal
Durban
Pietermaritzburg
Mpumalanga
Kruger National Park
The Drakensberg
Royal Natal National Park
The Garden Route
Oudtshoorn
Tsitsikamma Coastal National Park
Sudan
Eastern Sudan
Port Sudan
Khartoum
Swaziland
当然你只需要修改一下这个函数,也许是在帮助器中,用你的菜单的ul和li标签打印它们,因为它取决于你的前端