2009-11-16 6 views
28

는 여기에 내가 궁극적으로 필요한 특정 XML입니다 :Ruby 해시를 XML로 변환하려면 어떻게해야합니까?

<?xml version="1.0" encoding="UTF-8"?> 
<customer> 
    <email>[email protected]</email> 
    <first_name>Joe</first_name> 
    <last_name>Blow</last_name> 
</customer> 

그러나 방법에 데이터를 전송하고 있음을 나는 컨트롤러 (Ruby on Rails)가 말한다. 나는 이렇게 해시로 보내고 싶습니다.

:first_name => 'Joe', 
:last_name => 'Blow', 
:email => '[email protected]' 

그래서 어떻게 해시를 해당 XML 형식으로 변환 할 수 있습니까?

답변

63

ActiveSupport 해시하는 to_xml 방법을 추가, 그래서 당신은 꽤 가까이 갈 수있는이과를 찾고 있습니다 :

my_hash = { :first_name => 'Joe', :last_name => 'Blow', :email => '[email protected]'} 
my_hash.to_xml(:root => 'customer') 

을 그리고로 끝날 :

<?xml version="1.0" encoding="UTF-8"?> 
<customer> 
    <last-name>Blow</last-name> 
    <first-name>Joe</first-name> 
    <email>[email protected]</email> 
</customer> 

주 그 밑줄 대시로 변환됩니다.

+0

근본적인 옵션은 저를 던지기위한 것입니다. 감사! – Shpigford

+0

이 메서드를 사용하여 XML 요소에 특성을 추가하는 방법은 무엇입니까? – doremi

+3

당신은'sudo gem install activesupport'와 코드'active_support/core_ext "에'Hash # to_xml'을 요구합니다 –

3

이 데이터가 모델 인 경우 to_xml을 재정의하십시오.

그렇지 않으면 Builder이 좋습니다.

+1

음, to_xml을 시도했으며 XML 주위에 태그를 추가하고 있습니다. 즉. ... Shpigford

+0

는 고객 해시 활성 기록 객체인가? – bensie

+1

http://api.rubyonrails.org/classes/ActiveRecord/Serialization.html#M001876에서 XML 구조화 방법을 재정의하는 방법을 확인하십시오. – bensie

3

나는 이런 종류의 시설을 제공하는 XmlSimple과 같은 보석을 제안합니다.

+0

Rails를 사용하지 않아서이 기능이 저에게 효과적이었습니다. 다음은 xml에 대한 해시에 대한 한 줄짜리 코드입니다. 'XmlSimple.xml_out (hash, {: keeproot => true, : noescape => true})' –

2

잠시 후 내 대학에서 그 주제에 대해 짧은 프레젠테이션을했습니다. Here은 슬라이드입니다 (흥미로운 부분은 37 페이지에서 시작합니다)

2

보석 gyoku 매우 좋습니다.

Gyoku.xml(:lower_camel_case => "key")  
# => "<lowerCamelCase>key</lowerCamelCase>" 

Gyoku.xml({ :camel_case => "key" }, { :key_converter => :camelcase }) 
# => "<CamelCase>key</CamelCase>" 

Gyoku.xml({ acronym_abc: "value" }, key_converter: lambda { |key| key.camelize(:lower) }) 
# => "<acronymABC>value</acronymABC>" 

및 더 유용한 옵션.

+0

그레이트 지, JSON으로 변환 한 보석을 알고 계십니까 ?? –

+0

@AlejandroMontilla [Oj] (https://github.com/ohler55/oj) – rojcyk

관련 문제