如何用Nokogiri的XPath仅解析Resource下的默认Prices节点
只获取Resource下直接的Prices节点内的Price元素
这事儿好办,你之前用的.//price是递归查找当前节点下所有层级的price元素,所以会把products里嵌套的price也捞出来。只要调整定位语法,精准锁定resource的直接子节点prices里的price就行,给你两种常用方案:
方案一:精确的相对XPath路径
直接指定从resource节点出发,只找它的直接子节点prices下的price:
# 只获取resource下直接的prices里的price节点 default_price_nodes = resource.xpath("./prices/price")
语法细节解释:
./:表示从当前节点(也就是你拿到的resource节点)开始查找prices:匹配resource的直接子节点中的<prices>元素/price:匹配该<prices>下的直接子节点<price>
这样就完全不会碰products里嵌套的那些prices和price了。
方案二:用CSS选择器(Nokogiri同样支持)
如果你觉得XPath写起来有点绕,Nokogiri也支持CSS选择器,用>表示直接子元素,写法更直观:
default_price_nodes = resource.css("> prices > price")
效果和上面的XPath完全一致,看你个人习惯选哪种就行。
最后给个处理节点的小示例,方便你参考:
default_price_nodes.each do |price| date_from = price["datefrom"] date_to = price["dateto"] amount = price["price"].to_f currency = price["currency"] # 这里写你的业务处理逻辑,比如存入数据库或者转换为业务对象 end
内容的提问来源于stack exchange,提问作者Rober
相关产品推荐
相关产品推荐

