【发布时间】:2014-03-05 09:47:42
【问题描述】:
我有以下 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"]
但这并没有让我能够将它们分开以用于单独的记录。
【问题讨论】:
-
您可以使用
//Row[n]/AccountName访问AccountName以获取特定行n。//Row[1]/AccountName/@value将返回字符串“Cleveland”。您还可以仅将行节点 (//Row) 检索到对象中并在 ruby 中提取它们的子节点。 -
您使用
create!()的方式只会得到一条记录。我不确定这是否是你想要的。您想要每行一条记录吗? -
@MarkThomas - 是的,只有一条记录。最终,这些 sn-ps 是 api 请求的一部分,该请求仅获取一天的数据并创建记录以供以后调用。
-
@helderdarocha -
//Row[1]/AccountName/@value返回一个 Nokogiri 属性,我可以将其解析为“Cleveland”字符串。这仍然没有让我得到一个哈希值,我可以调用 hash[:account_name] 来获取所有帐户名称。
标签: ruby-on-rails xml xpath nokogiri