我有以下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