0

XML を返す Eve Online リクエストを使用しています。リクエストには HTTParty を使用しており、Nokogiri を使用して特定の要素の属性値を取得しようとしています。

応答の例を次に示します。

 <eveapi version="2"><currentTime>2012-10-19 22:41:56</currentTime><result><rowset  name="transactions" key="refID"  columns="date,refID,refTypeID,ownerName1,ownerID1,ownerName2,ownerID2,argName1,argID1,amount,balance,reason,taxReceiverID,taxAmount"><row date="2012-10-18 23:41:50" refID="232323" refTypeID="9" ownerName1="University of Caille" ownerID1="32232" ownerName2="name" ownerID2="34343" argName1="" argID1="0" amount="5000.00" balance="5000.00" reason="Starter fund" taxReceiverID="" taxAmount=""/></rowset></result><cachedUntil>2012-10-19 23:03:40</cachedUntil></eveapi>

要素「行」の属性にアクセスする必要があるだけで、多くの行が返される可能性があります。

私は XPath について読みましたが、私が理解していることから、次のことを行うとすべての行が返されるはずですdoc.xpath('row')が、何も返されません。

これが私がこれまでに持っているものです:

options = {:keyID => 111111, :vCode => 'fddfdfdfdf'}
response = HTTParty.post('https://api.eveonline.com/char/WalletJournal.xml.aspx', :body => options)
doc = Nokogiri::XML(response.body)
doc.xpath('row').each do |r|

end

ループは実行されません。

私は何を間違っていますか?すべての行要素を返し、各行の属性にアクセスする必要があります。

これは私が以前に持っていたコードで、別の文字を試して「整数を文字列に変換できません」というエラーが表示されるまで機能していました。

options = {:keyID => 434343, :vCode => 'fdfdfdfdf'}
response = HTTParty.post('https://api.eveonline.com/char/WalletJournal.xml.aspx', :body => options)
data = response.parsed_response
data['eveapi']['result']['rowset']['row'].each do |t|
  if t['ownerName2'].eql?('name') && !t['reason'].eql?('Starter fund')
    uniqueKey = t['ownerID1'].to_s + t['date']
    if !Payment.exists?(:unique_payment_key => uniqueKey)
      p = Payment.new
      p.owner_id = t['ownerID1']
      p.owner_name = t['ownerName1']
      p.unique_payment_key = uniqueKey
      p.amount = t['amount']
      p.reason = t['reason']
      p.save
    end
  end
end

申し訳ありませんが、エラーは次のerror: can't convert String into Integer online line 42とおりです

if t['ownerName2'].eql?('name') && !t['reason'].eql?('Starter fund')
4

1 に答える 1

1

行要素が任意の深さで必要であると仮定すると、//rowの代わりに を使用することで、差し迫った問題を解決できます。row

ただし、HTTParty は応答を解析するため、別の方法で解析する場合は、ページを投稿するためだけに HTTParty を使用するのは少し冗長です。

于 2012-10-19T23:04:35.813 に答える