我有以下XML文档:将XML文档中的单个行转换为散列?
<AccountPerformanceReportColumns>
<Column name="AccountName" />
<Column name="Impressions" />
<Column name="Clicks" />
<Column name="Ctr" />
<Column name="Conversions" />
<Column name="CostPerConversion" />
<Column name="Spend" />
</AccountPerformanceReportColumns>
<Table>
<Row>
<AccountName value="Cleveland" />
<Impressions value="5822" />
<Clicks value="138" />
<Ctr value="2.37" />
<Conversions value="0" />
<CostPerConversion value="" />
<Spend value="238.28" />
</Row>
<Row>
<AccountName value="Denver" />
<Impressions value="8196" />
<Clicks value="123" />
<Ctr value="1.50" />
<Conversions value="0" />
<CostPerConversion value="" />
<Spend value="258.32" />
</Row>
<Row>
<AccountName value="Houston" />
<Impressions value="7218" />
<Clicks value="105" />
<Ctr value="1.45" />
<Conversions value="3" />
<CostPerConversion value="75.88" />
<Spend value="227.63" />
</Row>
<Row>
<AccountName value="LA" />
<Impressions value="72290" />
<Clicks value="713" />
<Ctr value="0.99" />
<Conversions value="0" />
<CostPerConversion value="" />
<Spend value="932.93" />
</Row>
<Row>
<AccountName value="Louisville" />
<Impressions value="2811" />
<Clicks value="68" />
<Ctr value="2.42" />
<Conversions value="0" />
<CostPerConversion value="" />
<Spend value="167.09" />
</Row>
</Table>
我试图用引入nokogiri解析它,并将其转换为一个哈希这样我可以像哈希创建数据库记录:
BingRecords.create!(conversions: hash[:conversion],
spend: hash[:spend],
account_name: hash[:account_name],
date: date,
user_id: user.id)
如果是这样的:
hash[:account_name] => ["Cleveland", "Denver", "Houston", "LA", "Louisville"]
我试图做这样的事情:
bingstats = doc.xpath("//AccountName", "//Spend", "//Conversions")
这给了我从这些标签,然后stats = bingstats.map {|map| map.values}
所有的数据返回:
[["Cleveland], ["Denver"], ["Houston"], ["LA"], ["Louisville"], ["238.28"], ["258.32"]
但是这并没有给我把这些分开的单独记录的能力。
你可以用'//行[N]/AccountName'访问一个'AccountName'特定行'n'。 '// Row [1]/AccountName/@ value'将返回字符串“Cleveland”。您还可以只检索行节点('Row')到一个对象中并使用ruby提取它们的子节点。 – helderdarocha
您使用'create!()'的方式只能得到一条记录。我不确定这是不是你想要的。你想每行有一个记录吗? –
@MarkThomas - 是的,只有一个记录。最终,这些片段是api请求的一部分,该请求只抓取一天的数据,并创建一条记录供稍后调用。 – macoughl