2009-07-02 4 views
1

방금 ​​HTTParty를 사용하기 시작했으며 서버에서 응답 한 XML에서 해시를 만드는 방식에 문제가 발생했습니다.XML 및 HTTParty 문제

있다면 설치 서버에서 다음 빌더 템플릿 :

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

모든 HTTParty에 의해 만들어진 해시 빌더에 의해 생성 된 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 

(이하 "안녕, 세계"추가 주) 두 가지 도구가 갑자기 반대 : 빌더에서 내가 원하는 것을 지정하는 경우 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 프로젝트의 문제점 페이지에 문제를 게시 할 것입니다. 일부 XML 문제를 둘러싼 몇 가지 문제가있는 것처럼

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

은 이미 보인다. 하지만 개발자와 직접 의견을주고 의견을 제시하는 가장 좋은 방법입니다.

+0

고마워, 내가이 버그를 알아 낸 유일한 사람이 아닌 것 같아! – asymmetric

0

현재 httpaty는 XML 구문 분석에 multi_xml을 사용하고 있습니다. multi_xml은 사용 가능한 파싱 젬의 속도에 따라 사용합니다 : Ox, LibXML, Nokogiri, REXML. 즉, 설치 한 경우 Ox을 먼저 선택합니다. 사용할 구문 분석기를 지정할 수도 있습니다.

최근 multi_xml에서 해결 된 몇 가지 버그가있었습니다 (특히 어레이 관련). 당신이 당신의시나, 예를 들어 (httparty를 사용하려는 경우 다음

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

: 나는 당신을 제안

이처럼 Gemfile에 multi_xml의 최신 버전을 얻기 위해 GitHub의에 REPO에 들러 포인트 이 설정으로, multi_xml이 "보석 목록"출력에 표시되지 않습니다

require 'bundler/setup' 

참고 만 작동합니다 : 서버) 당신은이 작업을 수행 할 것입니다.