JSON与XML处理

JSON与XML处理 #

JSON #

require 'rubygems'
require 'json'

json = <<ST
{
    "data": [
        {
            "code": "404",
            "value": "not found"
        },
        {
            "code": "302",
            "value": "redirect"
        }
    ]
}
ST
obj = JSON.parse(json)
puts obj['data'][0]['code']

XML #

Dom #

解析 XML #

创建 Document

Document 可以使用文件或字符串进行创建

file = File.new('path')
Document.new(file)
content = '<a></a>'
Document.new(content)

解析 XML

require 'rexml/document'

include REXML

xmlfile=<<ST
<langs type='current'>
  <language>Java</language>
  <language>Groovy</language>
  <language>Scala</language>
  <language>Kotlin</language>
</langs>
ST

xmldoc = Document.new(xmlfile)

root = xmldoc.root
puts "Root element : " + root.attributes["type"]

xmldoc.root.elements.each('language') { |e|
  puts e.text
}

XPath #

获取第一个元素

langs = XPath.first(xmldoc, "//langs//language")     
puts "langs:\n #{langs}"                             

遍历标签

XPath.each(langs, "//language") { |e| puts "type: #{e.text}" }          

查找标签

names = XPath.match(xmldoc, "//language").map { |x| "language #{x.text}" }    
puts names                                                                    

Sax #

require 'rexml/document'
require 'rexml/streamlistener'
include REXML


class MyListener
  include REXML::StreamListener
  def tag_start(*args)
    puts "tag_start: #{args.map {|x| x.inspect}.join(', ')}"
  end

  def text(data)
    return if data =~ /^w*$/     # whitespace only
    abbrev = data[0..40] + (data.length > 40 ? "..." : "")
    puts "  text   :   #{abbrev.inspect}"
  end
end

list = MyListener.new
xmlfile = File.new("movies.xml")
Document.parse_stream(xmlfile, list)
沪ICP备17055033号-2