2014-01-14 1 views
0

Savon gem을 사용하여 외부 Webservice를 사용하고 있습니다.Savon을 사용할 때 WebService의 응답 XML 서식 지정

나는 함께 작업 할 수있는 올바른 해시를 XML을 청소하고 얻기 위해, WebService에, Savon 전에 의 응답을 처리 할 . 현재 Savon 호출 방법, 해시와 답변 : dataset_xml는 XML 문자열을 한 후

{:envelope => { 
    :body => { 
     :get_method_result => { 
      :result=>"OK", 
       :dataset_xml => " 
        <NewDataSet> 
         <xs:schema id=\"NewDataSet\" xmlns=\"\"........ 

느릅 나무, 당신은 볼 수 있습니다. 그래서 나는 이것을 취하여 완전한 해시를 갖기 위해 그것을 처리해야합니다.

내 답변에 다음과 같은 것이 있기 때문에이 모든 일이 발생합니다 : &lt;NewDataSet&gt;\r\n &lt;xs:schema id=\"NewDataSet\" xmlns=\ 내부에 XML이 있습니다. 수정이 가능하면 해시로 변환하기 위해 모든 후 처리 작업을 수행 할 필요가 없습니다.

답변

0

간단히 nokogiri gem을 사용하여 xml을 구문 분석 할 수 있습니다. 이미 해봤습니까?

단순히 친구가 그것을 해결

Nokogiri::XML(response[:body]) 
+0

그것은 분명 작동 ...하지만, 그것은 <,> 문자가 내가 일관성 XML이없는 :) –

+0

는 WS 응답을 부탁 해요 아니다 및있다, LT ... 그래서 Savon 다음에는 모든 것이 해시가 아닙니다. 일부 값은 XML 문자열입니다. 이것은 내가하고 싶지 않은, 당신이 제안하는 것과 같은 일을하도록 강요합니다. –

+0

먼저 청소 한 다음 구문 분석해야합니다. 이미 누군가가 이미 보석을 만들었지 만 찾을 수 없었습니다. 그래도 쉽게 할 수있는 것처럼 보입니다 :)''gt '를'<'로 대체 한 다음 nokogiri 구문 분석을 수행하십시오. –

0

시도 할 것이다, 그는 아파치 mod_substitute라는 이름의 모듈을 추가했습니다. 들어오는 XML을 구문 분석하고 CDATA 문자를 추출하는 데 사용했습니다. tha가 완료되면 Savon 보석은 깨끗한 XML을 받았다.이 XML은 한 단계에서 해시로 완벽하게 파싱되었다. 마지막에,

<Location /> 
    AddOutputFilterByType SUBSTITUTE text/html 
    Substitute "s|CDATAREGEX|' '|i" 
</Location>