我试图在XML文档中一起选择两个节点并将其打印出来。 我似乎无法将它们打印在一起。它们总是输出为“第一个节点列表”,然后是“第二个节点列表”。一个例子可以更好地说明:
<result>
<name>Peter</name>
<school>main school</school>
...
<score>4.5</score>
</result>
<result>
<name>John</name>
..
...
<score>3.5</score>
</result>
每个<result>
的格式并不总是相同。我需要选择<name>
和<score>
,以便它们一起出现:
Peter
4.5
John
3.5
或
Peter 4.5
John 3.5
到目前为止我只能得到这样的结果:
Peter
John
4.5
3.5
我一直在尝试各种不同的方法,如:
doc.xpath("//name/").xpath("//score").each do |link|
puts link
和嵌套do
/ end
循环的其他组合,但没有任何作用。
有什么想法吗?
答案 0 :(得分:3)
最明智的方法可能是首先选择result
个节点,然后为每个result
选择其name
和score
个节点:
doc.xpath('//result').each do |result|
name = result.at_xpath('./name').text
score = result.at_xpath('./score').text
# handle name and score however you want...
end
(这假设每个result
都有一个name
孩子和一个score
孩子。)
答案 1 :(得分:3)
也许您可以将name
值存储在数组中,然后在迭代score
值时迭代数组,同时打印它们:
array_of_names = []
doc.xpath("//name").each do |name|
array_of_names << name
end
counter = 0
doc.xpath("//score").each do |score|
puts "#{array_of_names[counter]}: #{score}"
counter += 1
end