2009-07-02 5 views
1

私はHTTPartyを使い始めました。サーバーから返されたXMLからHashを構築する方法に問題が発生しました。XMLとHTTPartyの問題

私のセットアップサーバー上で次のビルダーのテンプレート場合:

xml.thunt :sendSubscriptionResult, :"xmlns:thunt" => "http://example.com/thunt", :status => @status 

をHTTPartyによって建設されたハッシュは、Builderで生成されたXMLに一致する。すなわち、すべてが、うまく機能し、(後者は同じ要求を行うことによって観察することができます経由カール):

カール・リクエスト

curl -s -H "Accept: text/xml" -d "xml=`cat vendor/testxml/requests/sendsubscription.xml`" $SERVER/${name} 

REPL Y HTTParty

{"thunt:sendSubscriptionResult"=>{"status"=>"alreadySubscribed", "xmlns:thunt"=>"http://example.com/thunt"}} 

しかし

'<thunt:sendSubscriptionResult xmlns:thunt="http://example.com/thunt" status="alreadySubscribed" />' 

カール HTTParty要求

TreasureHunt.post('/sendsubscription', :query => { :xml => sub }) 

返信によって見られるように、

xml.thunt :sendSubscriptionResult, "Hello, World", :"xmlns:thunt" => "http://example.com/thunt", :status => @status 

(「こんにちは、世界」ほかの点に注意してください。)2つのツールが突然反対する:Builderで私は私がしたいことを指定した場合sendSubscriptionResult要素は、テキストノードを持っています。

カール

'<thunt:sendSubscriptionResult xmlns:thunt="http://example.com/thunt" status="alreadySubscribed">Hello, World</thunt:sendSubscriptionResult>' 

HTTParty

{"thunt:sendSubscriptionResult"=>"Hello, World"} 

あなたが見ることができるように、HTTPartyは、要素の属性をすべて取り除いた、そして得られたハッシュでのみテキストノードを入れている

これはHTTPartyのバグですか?何か間違っていますか? ありがとう!

+0

XMLとHTTPartyには何の問題もありませんでしたので、私はこれに確かな答えを見たいと思っています。 – tadman

答えて

1

あなたの問題を解決するにはgithubの問題に関する記事をご覧ください。 http://github.com/jnunemaker/httparty/issues/#issue/14

+0

ありがとう! xml_test.rbファイルは便利な読み物でした! – asymmetric

+0

私はxmlから一貫したハッシュを得るために複雑で不必要に混乱している理由がないことを私は付け加えるべきです。 – asymmetric

0

Githubプロジェクトの問題ページに問題を投稿します。

http://github.com/jnunemaker/httparty/issues

いくつかのXMLの問題を取り巻くいくつかの問題があるようですが、すでに見えます。しかし、開発者と直接コミュニケーションをとり、フィードバックを提供するには、間違いなく最適な方法です。

+0

ありがとう、私はこのバグに気づいた唯一の人ではないようです! – asymmetric

0

現在、httpartyはXML解析にmulti_xmlを使用しています。 multi_xmlは利用可能な解析宝石の速度に基づいて使用します:Ox、LibXML、Nokogiri、REXML。つまり、それがインストールされている場合、最初にOxを選択します。使用するパーサーを指定することもできます。

最近、特にアレイに関して、multi_xmlで解決されたバグがいくつかありました。

私はあなたがこのようなあなたのGemfileに、multi_xmlの非常に最新のバージョンを取得するためにGitHubのレポへのバンドラを指してお勧め:

gem 'multi_xml', :git => 'https://github.com/sferik/multi_xml' 
gem 'ox' 
gem 'httparty' 

次にあなたが(例えば、あなたのシナトラにhttpartyを使用しようとしているところこの設定で、multi_xmlはあなたの「宝石のリスト」出力に表示されませんことを

require 'bundler/setup' 

注意を、それが動作します:サーバー)あなたはこれを行うだろう。