正在解析 XML 条消息
Parsing XML message
我正在尝试解析以下 XML:
<marketstat><type id="18">
<buy><volume>33000000</volume><avg>40.53</avg><max>65.57</max><min>6.55</min><stddev>26.61</stddev><median>58.56</median><percentile>65.57</percentile></buy>
<sell><volume>494489</volume><avg>69.47</avg><max>69.47</max><min>69.47</min><stddev>0.00</stddev><median>69.47</median><percentile>69.47</percentile></sell>
<all><volume>33494489</volume><avg>40.96</avg><max>69.47</max><min>6.55</min><stddev>26.77</stddev><median>58.56</median><percentile>6.55</percentile></all>
</type><type id="19">
<buy><volume>270000</volume><avg>1707.31</avg><max>3549.38</max><min>239.74</min><stddev>1554.26</stddev><median>239.75</median><percentile>3549.34</percentile></buy>
<sell><volume>48599</volume><avg>24930.45</avg><max>29869.95</max><min>5200.00</min><stddev>9875.66</stddev><median>29869.93</median><percentile>5232.20</percentile></sell>
<all><volume>280926</volume><avg>1957.07</avg><max>10750.00</max><min>239.74</min><stddev>3352.87</stddev><median>1874.31</median><percentile>239.74</percentile></all>
</type></marketstat>
</evec_api>
我要检索的信息是与 ID 关联的最小卖出值和最大买入值,可在此处找到:<sell><min>69.47</min></sell>
。
我目前正在使用以下方法获取 XML:marketData = Nokogiri::XML(open(api))
下面会打印ID及其对应的min/max:
marketData = Nokogiri::XML(open(api))
marketData.xpath("//type").each do |i|
puts "#{i.attr('id')}: #{i.xpath('.//max').map {|j| j.text.to_f}.max}"
puts "#{i.attr('id')}: #{i.xpath('.//min').map {|j| j.text.to_f}.min}"
end
输出:
18: 69.47
18: 6.55
19: 29869.95
19: 239.74
使用xpath
拉出感兴趣的节点,然后将它们转换为Float
并选择您想要的值。你的最小销售节点的路径是/marketstat/type/sell/min
,或者如果你想使用shorthand,//
表示"anywhere in the document",所以你可以指定只是//sell/min
得到所有最小卖出节点和 //buy/max
以获得所有最大买入。
sells = market_data.xpath('//sell/min').map(&:content).map(&:to_f)
buys = market_data.xpath('//buy/max').map(&:content).map(&:to_f)
puts sells.min, buys.max
我正在尝试解析以下 XML:
<marketstat><type id="18">
<buy><volume>33000000</volume><avg>40.53</avg><max>65.57</max><min>6.55</min><stddev>26.61</stddev><median>58.56</median><percentile>65.57</percentile></buy>
<sell><volume>494489</volume><avg>69.47</avg><max>69.47</max><min>69.47</min><stddev>0.00</stddev><median>69.47</median><percentile>69.47</percentile></sell>
<all><volume>33494489</volume><avg>40.96</avg><max>69.47</max><min>6.55</min><stddev>26.77</stddev><median>58.56</median><percentile>6.55</percentile></all>
</type><type id="19">
<buy><volume>270000</volume><avg>1707.31</avg><max>3549.38</max><min>239.74</min><stddev>1554.26</stddev><median>239.75</median><percentile>3549.34</percentile></buy>
<sell><volume>48599</volume><avg>24930.45</avg><max>29869.95</max><min>5200.00</min><stddev>9875.66</stddev><median>29869.93</median><percentile>5232.20</percentile></sell>
<all><volume>280926</volume><avg>1957.07</avg><max>10750.00</max><min>239.74</min><stddev>3352.87</stddev><median>1874.31</median><percentile>239.74</percentile></all>
</type></marketstat>
</evec_api>
我要检索的信息是与 ID 关联的最小卖出值和最大买入值,可在此处找到:<sell><min>69.47</min></sell>
。
我目前正在使用以下方法获取 XML:marketData = Nokogiri::XML(open(api))
下面会打印ID及其对应的min/max:
marketData = Nokogiri::XML(open(api))
marketData.xpath("//type").each do |i|
puts "#{i.attr('id')}: #{i.xpath('.//max').map {|j| j.text.to_f}.max}"
puts "#{i.attr('id')}: #{i.xpath('.//min').map {|j| j.text.to_f}.min}"
end
输出:
18: 69.47
18: 6.55
19: 29869.95
19: 239.74
使用xpath
拉出感兴趣的节点,然后将它们转换为Float
并选择您想要的值。你的最小销售节点的路径是/marketstat/type/sell/min
,或者如果你想使用shorthand,//
表示"anywhere in the document",所以你可以指定只是//sell/min
得到所有最小卖出节点和 //buy/max
以获得所有最大买入。
sells = market_data.xpath('//sell/min').map(&:content).map(&:to_f)
buys = market_data.xpath('//buy/max').map(&:content).map(&:to_f)
puts sells.min, buys.max