2014-03-07 2 views
0

사용중인 공급 업체 (JSON 읽기를 거부하는 사용자)의 간단한 XML 피드를 설정합니다.레일 XML 피드 : 노드 ID로 ID

<recipes type="array"> 
    <recipe> 
    <id type="integer">1</id> 
    <name> 
     Hamburgers 
    </name> 
    <producturl> 
     http://test.com 
    </producturl> 
    ... 
    </recipe> 
    ... 
<recipe> 

그러나 공급 업체는 id 노드를 갖는 대신 id를 부모 노드의 특성으로 요청합니다. 예 :

<recipes type="array"> 
    <recipe id="1"> 
    <name> 
     Hamburgers 
    </name> 
    <producturl> 
     http://test.com 
    </producturl> 
    ... 
    </recipe> 
    ... 
<recipe> 

나는 (기본적으로)

xml_feed = [] 
recipes.each do |recipe| 
    xml_feed <<{id: recipe.id, name: recipe.name, ...} 
end 
... 
render xml: xml_feed.to_xml(root: 'recipes') 

으로이 짓고 있어요하지만 난 그런 부모 노드의 속성과 ID (또는 필드)를 포함하는 방법을 확실 해요. 나는 주위를 인터넷 검색하고 아무 것도 찾을 수 없었으며, http://api.rubyonrails.org/classes/ActiveRecord/Serialization.html 문서가 매우 유용했습니다.

고마워요!

답변

1

나는 nokogiri 보석을 사용하시기 바랍니다. XML을 처리 할 때 필요한 모든 것을 제공합니다.

builder = Nokogiri::XML::Builder.new do |xml| 
xml.root { 
    xml.objects { 
    xml.object.classy.thing! 
    } 
} 
end 
puts builder.to_xml 

<?xml version="1.0"?> 
<root> 
<objects> 
    <object class="classy" id="thing"/> 
</objects> 
</root> 
1

Nokogiri를 사용하는 것이 좋습니다. 단지 sintax가 조금 달라서 요청한 바를 충족시켜야합니다.

builder = Nokogiri::XML::Builder.new do |xml| 
xml.root { 
    xml.object('type' => 'Client') { 
    xml.name 'John' 
    } 
} 
end 
puts builder.to_xml 

<?xml version="1.0"?> 
<root> 
<object type="Client"> 
    <name>John</name> 
</object> 
</root>