【发布时间】:2015-10-31 07:43:05
【问题描述】:
我正在尝试使用 Nokogiri 的 XPath 解析这个 XML 结构。
<root>
<resource id='1' name='name1>
<prices>
<price datefrom='2015-01-01' dateto='2015-05-31' price='3000' currency='EUR'></price>
<price datefrom='2015-06-01' dateto='2015-12-31' price='4000' currency='EUR' ></price>
</prices>
</resource>
<!-- many more resource nodes -->
<root>
我正在迭代每个资源,对于每个资源,我需要获取它的 <prices> 元素:
resourcesParsed = Nokogiri::XML(resourcesXML)
resources = resourcesParsed.xpath("//resource")
for resource in resources do
id = resource["id"]
# insert in resources tables
# parsing resource prices
getPrices(resource)
end
...
def getPrices(resource)
prices = resource.xpath("//price")
@logger.debug "prices=" + prices.to_s
# do whatever
end
由于某种原因,当我尝试解析 //price 时,它不仅获得了资源中的 <price> 节点,而且还获得了整个 XML 文档中的所有 <prices> 节点。
如何只解析资源的<price> 节点?
【问题讨论】:
-
作为编码风格建议,不要使用
for resource in resources do。而是使用each进行迭代。它是更干净和惯用的 Ruby。此外,我们不使用 camelCase 来表示变量或方法名;相反,我们使用snake_case。它的 AMatterOfReadability。