歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Ruby解析XML文件

Ruby解析XML文件

日期:2017/3/1 9:45:20   编辑:Linux編程

Ruby是一款對開發版本依賴度很高的語言,而且目前不支持中文(如果要使用中文字符,可使用UTF-8)

以下程序在 Ruby 1.8.6 下編譯通過, IDE環境為 RubyMine [比NetBean好用]

《Ruby for Rails中文版》.((美)David Black ).[PDF] http://www.linuxidc.com/Linux/2014-03/97569.htm

重要文章閱讀:Ruby入門--Linux/Windows下的安裝、代碼開發及Rails實戰 http://www.linuxidc.com/Linux/2014-04/100242.htm

# 解析XML文件

require "rexml/document"
include REXML
puts "-- BEGIN --"
doc = Document.new(File.open("TestXML.xml"))
#doc.elements.each('BoardComposant') do |elem|
# cr_ele = elem.get_elements('ComponantRectangle')
# puts cr_ele
#end
doc.elements.each("BoardComposant/ComponantRectangle"){ |elem|
if "second" == elem.attributes["name"] then
puts " => 2th"
puts elem.elements[2].elements["Height"].text
elem.elements.each{ |e|
puts e.elements["Height"].text
}
end
}
#----------------------------------------------
puts "-----------------------------------------"
#----------------------------------------------
input = File.new("book.xml")
doc = Document.new(input)

root = doc.root
puts root.attributes["shelf"] # Recent Acquisitions 

doc.elements.each("library/section") { |e| puts e.attributes["name"] }
# Output: 
# Ruby 
# Space 

doc.elements.each("*/section/book") { |e| puts e.attributes["isbn"] }
# Output: 
#  0672328844 
#  0321445619 
#  0684835509 
#  074325631X 

sec2 = root.elements[2]
author = sec2.elements[1].elements["author"].text # Robert Zubrin
puts author
puts "-- End --"


以下是待解析的XML文件

book.xml

<library shelf="Recent Acquisitions">
<section name="Ruby">
<book isbn="0672328844">
<title>The Ruby Way</title>
<author>Hal Fulton</author>
<description>
Second edition. The book you are now reading.
Ain't recursion grand?
</description>
</book>
</section>
<section name="Space">
<book isbn="0684835509">
<title>The Case for Mars</title>
<author>Robert Zubrin</author>
<description>Pushing toward a second home for the human
race.
</description>
</book>
<book isbn="074325631X">
<title>First Man: The Life of Neil A. Armstrong</title>
<author>James R. Hansen</author>
<description>Definitive biography of the first man on
the moon. </description>
</book>
</section>
</library>

TestXML.xml

<?xml version="1.0" encoding="utf-8"?>
<BoardComposant>
<ComponantRectangle name="first" X="97" Y="186" Height="382" Width="587" >
<JoinSpot>
<Position>
<X>147</X>
<Y>219</Y>
</Position>
<Height>76</Height>
<Width>86</Width>
</JoinSpot>
<JoinSpot>
<Position>
<X>510</X>
<Y>236</Y>
</Position>
<Height>65</Height>
<Width>77</Width>
</JoinSpot>
<JoinSpot>
<Position>
<X>194</X>
<Y>380</Y>
</Position>
<Height>108</Height>
<Width>83</Width>
</JoinSpot>
<JoinSpot>
<Position>
<X>417</X>
<Y>400</Y>
</Position>
<Height>85</Height>
<Width>167</Width>
</JoinSpot>
</ComponantRectangle>

<ComponantRectangle name="second" X="733" Y="179" Height="410" Width="343">
<JoinSpot>
<Position>
<X>770</X>
<Y>221</Y>
</Position>
<Height>78</Height>
<Width>70</Width>
</JoinSpot>
<JoinSpot>
<Position>
<X>916</X>
<Y>259</Y>
</Position>
<Height>68</Height>
<Width>92</Width>
</JoinSpot>
<JoinSpot>
<Position>
<X>839</X>
<Y>416</Y>
</Position>
<Height>109</Height>
<Width>62</Width>
</JoinSpot>
<JoinSpot>
<Position>
<X>953</X>
<Y>410</Y>
</Position>
<Height>85</Height>
<Width>63</Width>
</JoinSpot>
</ComponantRectangle>

<ComponantRectangle name="third" X="126" Y="624" Height="282" Width="471">
<JoinSpot>
<Position>
<X>179</X>
<Y>658</Y>
</Position>
<Height>108</Height>
<Width>133</Width>
</JoinSpot>
</ComponantRectangle>

<ComponantRectangle name="forth" X="333" Y="122" Height="282" Width="471" />
</BoardComposant>

最後show一下我的RubyMine 嘿嘿~~~

Copyright © Linux教程網 All Rights Reserved