19 12
发新话题
打印

用Ruby+Builder创建XML应用

用Ruby+Builder创建XML应用

  一、 简介

  自从去年Ruby on Rails问世后,人们对Ruby编程语言兴趣似乎稳定地增长起来。Rails已经帮助人们看到了什么是Ruby:一种非常体面的,易学的且使用中充满了乐趣的语言,甚至适合于工业级应用软件开发。Ruby出现在几乎与Java差不多的年代,但是直到如今它才引起人们的关注。

  Ruby当然也引起我的注意!最近,我发现自己使用Ruby的时间多于Java了,因为它可以帮助我更快地编码-实现相同的工作,但是击键次数却更少。我简直怀疑我是否实际完全放弃了Java而转向了Ruby。读完本文时,你就会明白其中的原因。

  Builder是一个轻量级的XML构建器,它最初来源于Rails工程。现在,它是一个你可以从RubyForge下载的独立的Ruby库。

  本文将介绍如何安装Builder,然后用在Ruby中使用Builder创建XML文档,而不需要Rails。当然,我不会涉及Builder的所有特征,但是对于本文中的内容已经足够。当然,你可以参考Builder的在线文档加以详细分析。

  二、 安装Ruby和Builder

  首先,让我们转到Ruby下载页面。你可以在这个地址下载当前的稳定的发行版本。如果你使用的是Windows平台,那么安装Ruby的最容易的方法是使用一键式Ruby安装程序(版本1.8.2);如果使用其它平台,你可以使用1.8.3版本,这是一个经tar和gzip压缩的文件。(顺便说,1.8.2版本是推荐适合于Rails的,而1.8.4版本还处于预览发行阶段)。你可以通过在命令行上输入"ruby -v"来测试你的安装。如果Ruby有回应,那么你可能成功了;如果操作系统出现某些提示,那么很可能你的安装出了问题。

  迄今为止,安装Builder的最容易的方法是使用RubyGems,这是一个针对Ruby的极好的包管理程序。在此我仅作简介。首先,下载RubyGems,然后运行"Ruby setup.rb"。在安装RubyGems后,在某个外壳程序中输入下列语句:

gem install builder

  如果一切顺利,你应该看见下列响应:

Attempting local installation of 'builder'
Local gem file not found: builder*.gem
Attempting remote installation of 'builder'
Updating Gem source index for: http://gems.rubyforge.org
Successfully installed builder-1.2.4
Installing RDoc documentation for builder-1.2.4...

  在Ruby和Builder都到位后,你就可以开始工作了。

  三、 初步使用Builder

  首先,我将通过交互的Ruby或irb向你展示有关Builder的一些基本功能。在一个外壳程序中,激活irb,并关掉标准提示符(为易读起见):

  irb --simple-prompt

  现在,让我们在irb中输入下列语句(加粗的部分)来创建一些XML。

>> require 'builder'
=> ...
>> x = Builder::XmlMarkup.new(:target => $stdout, :indent => 1)
<inspect/>
=> #<IO:0x279e7e8>

  以require开头的一行装载(或试图装载)库Builder。(通常,如果发现一个库,那么这个语句将返回true)。接下来的一行通过调用XmlMarkup中的新方法创建对象x。":target => stdout"参数指示输出内容将被写向标准输出控制台,而参数":indent =>1"意味着XML输出形式将被缩进一个空格字符。

  顺便说一下,当一个名字,例如":target"以冒号开头时,这意味着,它是一个符号,或更确切地说,是一个Ruby Symbol类的对象。它代表对象的名称;而在没有冒号时它代表对象的值。

  你可以使用实例(接收者)x来调用其它方法(如instruct!):

>> x.instruct!
<?xml version="1.0" encoding="UTF-8"?>
=> #<IO:0x279e7e8>

  这将生成一个具有一些缺省假属性的XML声明。该方法名后面的感叹号概要性地指出,该方法将适当地修改接收者(receiver),如果无任何变化的话则返回nil。下面生成一个XML注释:

>> x.comment! "greetings"
<!-- greetings -->
=> #<IO:0x279e7e8>

  注意,这个方法把一个空格字符插在注释文本的前后。

  下面解释怎样创建一个元素。跟在接收者后面的名字也是元素名并且是大小写敏感的:

>> x.Hello "World!"
<Hello>World!</Hello>
=> #<IO:0x279e7e8>

  下面是一种在Hello元素上创建属性的方法:

>> x.Hello("World!", "type" => "global")
<Hello type="global">World!</Hello> #<IO:0x279e7e8>

  第一个参数是元素的内容,第二个参数使用一个"global"值生成属性类型。

  下面的irb示例向你展示了如何把元素内容放在元素内。其中,date元素包含3个子元素:year,month和day;并且子元素被创建于大括号中。

>> x.date {
?> x.year "2006"
>> x.month "01"
>> x.day "01"
>> }
<date>
<year>2006>year>
<month>01>month>
<day>01>day>
<date>
=> #>IO:0x279e7e8>
>>

  这些irb示例实际隐藏了用Ruby编写原始的XML的明显特征。下面的示例向你展示更为复杂些的Builder应用。
这世界总有你不明白

TOP

  四、 编写一个哈希作为XML标注

  通过使用Builder,程序favs.rb将创建一个称为favorites的哈希(hash),然后把它作为XML写出:

#!/usr/bin/ruby
require 'builder'
favorites = {
'candy' => 'Neccos', 'novel' => 'Empire of the Sun', 'holiday' => 'Easter'
}
xml = Builder::XmlMarkup.new( :target => $stdout, :indent => 2 )
xml.instruct! :xml, :version => "1.1", :encoding => "US-ASCII"
xml.favorites do
favorites.each do | name, choice |
xml.favorite( choice, :item => name )
end
end

  使用Ruby运行favs.rb,其输出将是:

<?xml version="1.1" encoding="US-ASCII"?>
<favorites>
<favorite item="candy">Neccos<favorite>
<favorite item="holiday">Easter<favorite>
<favorite item="novel">Empire of the Sun<favorite>
<favorites>

  最上面一行代码找到Ruby解释器(#!/usr/bin/ruby)的位置。然后,装载Builder库。接着,通过三个名字/值对定义favorites哈希。在此,Builder对象xml被实例化。instruct!方法通过使用一个显式的目标和假属性创建一个XML文档声明(尽管文档可以被作为XML 1.0传递,但是,我在该方法中把版本改为1.1仅为说明实现原理)。

  在此,在favorites上调用了一个块(block)(注意,你可以用括号方式来代替上面的"do……end"语句)。对于哈希中的每一对值,都是通过把该哈希名作为一个属性并且把哈希值作为元素内容来创建的。你可能猜出,用这种方式使用Builder可以非常方便地帮助把大量的名字/值对导出到XML中。

  五、 创建有效的XHTML文档

  最后,我将再讨论一下使用Builder编写有效的XHTML文档的其它的方法和技术。下面是创建这种文档的一个程序(xhtml.rb):

#!/usr/bin/ruby
require 'builder'
x = Builder::XmlMarkup.new(:target => $stdout, :indent => 1)
x.instruct!
x.declare! :DOCTYPE, :html, :PUBLIC, "-//W3C//DTD XHTML 1.0 Strict//EN", "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
x.html( "xmlns" => "http://www.w3.org/1999/xhtml" ) {
x.head {
x.title "XHTML 1.0 example"
x.style( "type"=>text/css" ) { x.text! "h1 {font-family:tahoma,sans-serif;font-size:18pt;color:blue} body{font-family:georgia,serif}"
}
}
x.body {
x.h1 "Hello from Builder"
x.p "A Ruby library that facilitates the programatic generation of XML."
x.p { |y| y <<"Methods of interest from <code<Builder::XmlMarkup</code> }
x.ul {
x.li "cdata!"
x.li "comment!"
x.li "declare!"
x.li "instruct!"
x.li "new"
}
x.p{ |y| y << "Methods of interest from "; x.code "Builder::XmlBase"; y << ":" }
x.ul {
x.li "<<"
x.li "new"
x.li "text!"
}
}
}


  通过使用符号和字符串,Declare!方法产生一个相应于XHTML 1.0文档类型定义的文档类型声明。style元素用于指定一个类型属性,然后使用text!方法创建了一些CSS。这里选择了把内容放在第一个参数中,见下面代码片断:

x.style("h1 {font-family:tahoma,sans-serif;font-size:18pt;color:blue} body{font-
family:georgia,serif}", "type"=>"text/css" )

  这里,可能最有趣的代码是那些创建混合内容的段(paragraph)的代码行(在文本中嵌入了代码元素)。两个语句都使用了块参数|y|,然后使用<<方法把文本添加到它上面。第一个语句把标签嵌入到文本中;第二个语句用代码创建标签,语句之间用分号分开。
Builder是我所发现的用来生成XML标注的最容易使用的工具集之一。尽管本文仅涉及到它的一些简单应用,但却为你在实际工作中使用Builder打好了基础
这世界总有你不明白

TOP

上海私家侦探,LED屏厂家,触摸显示器,排队叫号机

专业上海私家侦探服务

经典的LED屏厂家
触摸显示器 排队叫号机
就点击他们
大家都很喜欢的服务

TOP

丽妍堂

正品丽妍堂真轻松排汗运动机厂家直销13738963879原厂正品--丽妍堂真轻松排汗运动机,蒸美康排汗运动机厂家授权,优惠直销.订购热线0579-87368390,运动排汗,强身健体,采用薰蒸的原理,集排毒,减压,健体,美容养颜,减肥,黄金睡眠功效为一体.每天蒸一蒸,跟疲劳,斑点,毒素说再见. 丽妍堂排汗,丽妍堂排汗机好不好,丽妍堂排汗机怎么样,丽妍堂排汗机好吗,丽妍堂真轻松排汗机 丽妍堂排汗运动机,丽妍堂排汗机的价格,丽妍堂真舒服排汗机,丽妍堂排汗机好不好,丽妍堂排汗机怎么样,丽妍堂排汗机好吗,丽妍堂排汗机价格,丽妍堂蒸汽排汗机。公司网站:www.hd273.com

TOP

which one you like? ^^

HI:
there are many online game here,is there some game you like?
hehe, can you guess what's the game i like? :p
cheap FFXI Gil
knight gold
buy dofus kamas
cheap 2moons dil
haha, there are some game you like here, me too!
have you guess what's the game i like?
haha, tell you the next time! ^^

TOP

很好。。很暴力

很好。。很强大

-------------------------------------------------------------------------------------------------------------------------------------------
老虎機遥控器价格,2008老虎機定位器,山东老虎機定位器,老虎機退币器,老虎機报警器

TOP

沈阳宏海机械厂供应梅花糕机024-82116562

沈阳宏海机械厂www.086hh.com批发零售梅花糕机!单模5瓣梅花型,模具带上盖,两边对称带有手把,使用方便操作简单!另提供女士用轻便7头梅花糕机!赠送专用面浆壶,专用挑钩,操作台平面设计图,制作工艺流程光盘!电话:024-82116562 QQ:491783951
沈阳宏海

TOP

反击破 锤式反击破碎机

选矿设备选铁设备选矿生产线球磨机价格报价

TOP

高手啊!

支持!支持!

开店 创业 投资 加盟 连锁

TOP

高中生留学加拿大

高中生留学加拿大另外对于国内的申请人,高中生留学加拿大在申请的时候,一定要多注意材料的准备高中生留学加拿大。因为加拿大的教授先是通过这些材料来了解你的高中生留学加拿大。并且根据你的材料来决定申请人是否能够被录取高中生留学加拿大尤其申请人的个人陈述,是非常重要的,就像一面镜子来呈现你的各方面的能力高中生留学加拿大..



wow gold

TOP

新快乐态度

酒是拉近人们距离、建立[http://clwxgs.qianyan.biz/]春兰空调特约维修[/url]彼此信任感的好东西。但在另一方面,被迫饮酒直到大吐特吐,对熟络感情科龙空调特约维修反而会起反效果。
优秀的装修公司

TOP

选矿设备

郑州环球重工机械有限公司专业生产选矿设备,包括:球磨机、烘干机、回转窑、磁选机、浮选机、分级机、棒磨机、洗矿机。
联系方式:
地 址:郑州市南阳路216号
电 话:86-371-67878896
传 真:86-371-67823216
E-mail:huanqiuzg@gmail.com

TOP

很不错的地方

很不错的地方哦:
以后俺常来!!


翻译公司专业提供翻译公司等相关翻译公司的服务!
翻译公司专业提供翻译公司等相关翻译公司的服务!
wow gold的销售wow gold,有很多便宜的wow gold啊!
wow gold的销售wow gold,有很多便宜的wow gold啊!
wow gold的销售wow gold,有很多便宜的wow gold啊!
我的家:wow power leveling

TOP

支持

这样的文章,不顶不行呀。



我的个性签名:
--------------------------------------------------------------------------------------------------------------------------
wow power leveling,wow powerleveling,world of warcraft power leveling,world of warcraft gold,wow gold,

TOP

呵呵 坐下漫漫看

呵呵    坐下漫漫看~~~~~~~~

















海汇服装辅料有限公司是各种中高档衬衫衬布的专业生产商.公司主要产品包括:中高档衬衫衬,女装衬,免烫衬布,超低缩率衬布,超低甲醛衬布,水溶性衬布防油抗污衬布等.

TOP

 19 12
发新话题