gpt4 book ai didi

ruby - 我将如何使用 Ruby 解析此 XML?

转载 作者:数据小太阳 更新时间:2023-10-29 02:27:36 25 4
gpt4 key购买 nike

目前,我有一个 XML 文档(称为 Food_Display_Table.xml),其中的数据格式如下:

<Food_Display_Table>
<Food_Display_Row>
<Food_Code>12350000</Food_Code>
<Display_Name>Sour cream dip</Display_Name>
....
<Solid_Fats>105.64850</Solid_Fats>
<Added_Sugars>1.57001</Added_Sugars>
<Alcohol>.00000</Alcohol>
<Calories>133.65000</Calories>
<Saturated_Fats>7.36898</Saturated_Fats>
</Food_Display_Row>
...
</Food_Display_Table>

我想以人类可读的格式打印其中的一些信息。像这样:

-----
Sour cream dip
Calories: 133.65000
Saturated Fats: 7.36898
-----

到目前为止,我已经试过了,但它不起作用:

require 'rexml/document'
include REXML

data = Document.new File.new("Food_Display_Table.xml", "r")

data.elements.each("*/*/*") do |foodcode, displayname, portiondefault, portionamount, portiondisplayname, factor, increments, multiplier, grains, wholegrains, orangevegetables, darkgreenvegetables, starchyvegetables, othervegetables, fruits, milk, meats, soy, drybeans, oils, solidfats, addedsugars, alcohol, calories, saturatedfats|
puts "----"
puts displayname
puts "Calories: {calories}"
puts "Saturated Fats: {saturatedfats}"
puts "----"
end

最佳答案

使用 Xpath。我倾向于使用 Nokogiri,因为我更喜欢 API。

使用硬编码的路径:

doc = Nokogiri::XML(xml_string)
doc.xpath(".//Food_Display_Row").each do |node|
puts "-"*5
puts "Name: #{node.xpath('.//Display_Name').text}"
puts "Calories: #{node.xpath('.//Calories').text}"
puts "Saturated Fats: #{node.xpath('.//Saturated_Fats').text}"
puts "-"*5
end

或者有点干燥的东西。

nodes_to_display = ["Display_Name", "Calories", "Saturated_Fats"]

doc = Nokogiri::XML(xml_string)
doc.xpath(".//Food_Display_Row").each do |node|
nodes_to_display.each do |node_name|
if value = node.at_xpath(".//#{node_name}")
puts "#{node_name}: #{value.text}"
end
end
end

关于ruby - 我将如何使用 Ruby 解析此 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7536437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com