2011-11-18 64 views
-1

我有以下XML:紅寶石:XML到JSON樹解析

<fruits> 
    <fruit>APPLE</fruit> 
    <fruit>PEACH</fruit> 
    <fruit>BANANA</fruit> 
</fruits> 

當我將它解析爲JSON或對象我得到以下幾點:

{ 
    "fruits": { 
     "fruit": [ 
      'APPLE', 'PEACH', 'BANANA' 
     ] 
    } 
} 

,但我想以下幾點:

{ 
    "fruits": [ 'APPLE', 'PEACH', 'BANANA' ] 
} 

我該怎麼辦?

+6

顯示代碼... – tokland

回答

1

有一個在XmlSimple稱那是爲了你在XML到散列轉換想要什麼「GroupTags」的選項。當你想要分組的標籤不是根目錄時,它似乎工作。

例如,如果你的XML實際上有它不同的根元素:

<root> 
<fruits> 
    <fruit>APPLE</fruit> 
    <fruit>PEACH</fruit> 
    <fruit>BANANA</fruit> 
</fruits> 
</root> 

然後你就可以做到以下幾點:

options = { 
      'ForceArray' => false, 
      'GroupTags' => {'fruits'=>'fruit'} 
      } 
XmlSimple.xml_in(xml, options) 

#=> {"fruits"=>["APPLE", "PEACH", "BANANA"]} 

相當於你正在尋找的JSON。

不幸的是,如果<fruits>是您的根元素,則GroupTags選項不生效。

0

沿着這些線?

#!/usr/bin/env ruby 
require 'json' 
require 'nokogiri' 

xml = Nokogiri::XML(<<XML) 
<fruits> 
    <fruit>APPLE</fruit> 
    <fruit>PEACH</fruit> 
    <fruit>BANANA</fruit> 
</fruits> 
XML 

results = 
    xml.xpath('/*').map{|parent| 
    [ parent.name, 
     parent.xpath('*').map{|child| child.text } ] } 

puts JSON.pretty_unparse(Hash[results])