在RailsApp上写XML

在安装Builder之前,我们需要安装在Rails 框架下的Ruby 和RubyGems(标准的Ruby 包管理器)。下 载Ruby Windows安装程序并且双击这个ruby185-21.exe 文件。在Ruby 安装向导开始后,点击Next并且接 受许可协议。选择默认的部件安装,包括RubyGems 包管理器。指定一个路径安装Ruby(默认路径是 c:/ruby),接着再单击Next。指定一个开始目录文件夹并且单击Install 键来安装Ruby和RubyGems。接 下来,安装Rails。从c:/ruby,也就是Ruby 安装到的那个路径,来运行下面的命令来安装Rails及Rails 附属文件。

c:/ruby>gem install rails --include-dependencies

Builder包括了RubyGems包管理器。运行下面的命令来安装Builder 2.0.0。

C:/ruby>gem install builder

这个Builder::XmlMarkup类提供了表1中讨论的方法。

方法  描述 cdata!(text) 增加了一个CDATA 部分。 comment!(comment_text) 增加一个注释。 declare!(inst, *args, &block) 增加一个声明。参数指定为0或者更多的参数。 instruct!(directive_tag=:xml, attrs={}) 增加一个处理指示。属性是用一个哈希表来指定的。 new(options={}) 创建一个XML标记Builder对象,接下来的选 项: target=>targetObject:indent=> indentation :margin=>initial_indentation 声明了一个 哈希表的入口。 target!() 返回Builder 对象的目标。

表1:Builder::XmlMarkup方法

为了从数据库中创建一个XML文件,我们也需要安装mysql数据库。下载MySQL 5.0。双击Setup.exe安 装MySQL,然后创建一个MYSQL服务器实例。

从数据库中创建一个XML文件

在这一节,我们将会从数据库表中创建一个XML文件。为了从数据库中创建一个XML文件,我们先创建 一个Rails 应用程序:

C:/ruby>rails databasexml

为了指定测试用数据库,在app/config/database.yml文件中修改开发模式设置。这个MySQL 数据库的 开发模式设置在下表中列了出来。

development: adapter: mysqldatabase: test username: root  password: nilhost: localhost

我们将要使用ActiveRecord迁移去创建一个数据库表。利用下面的Ruby 命令来创建一个模型脚本,从 而创建一个迁移脚本:

C:/ruby/databasexml> ruby script/generate model catalog

一个模型脚本app/models/catalog.rb和迁移脚本script. db/migrate/001_create_catalogs.rb就这样 被创建好了。这个继承自ActiveRecord::Migration类的迁移脚本类CreateCatalogs,在下表被列出:

class CreateCatalogs < ActiveRecord::Migrationdef self.upcreate_table :catalogs do |t|# t.column :name, :stringendenddef self.downdrop_table :catalogsendend

默认的迁移脚本由self.up方法和self.down方法组成。其中,self.up方法被调用来运行一个迁移并且 创建一个数据库表。转化自ActiveRecord::Migration类的create_table被用来创建一个数据库表目录。 ActiveRecord用来以复数形式映射一个模型类到一个数据库表中。这个模型类是单数的,大写的;数据库 表却是复数而且是小写的。在Ruby on Rails应用程序的例子中,这个模型类是Catalog,数据库表是 catalogs。

修改这个迁移脚本001_create_catalogs.rb 去创建一个数据库表并且添加数据到表中。在 create_table转化中,用定期刊物的专栏、出版者、题目和作者来创建一个表目录,如下所示:

class CreateCatalogs 255t.column :publisher, :string, :limit => 255t.column :edition, :string, :limit => 255t.column :title, :string, :limit => 255t.column :author, :string, :limit => 255endCatalog.create :journal => "IBM developerWorks",:publisher => "IBM", :edition =>" October 2005",:title=> "JAXP validation",:author=>"Brett McLaughlin"Catalog.create :journal => "IBM developerWorks",:publisher => "IBM", :edition => "July 2006",:title=> "The Java XPath API",:author=>"Elliotte Rusty Harold"enddef self.downdrop_table :catalogsendend

用rake. rake运行这个迁移脚本和在J2EE中运行Ant有相似之处。Rails 提供了一个叫做迁移的目标去 运行迁移。

C:/ruby/databasexml>rake migrate

这个数据库表目录是在MySQL 数据库中被创建的。下面,创建一个控制器脚本,包括一个控制器动作 gen_xml,以便从数据库表中产生一个XML文件。

C:/ruby/databasexml>ruby script/generatecontroller catalog gen_xml

这个控制器脚本app/controllers/catalog_controller.rb被创建了。修改这个模型脚本来设置数据库 表并建立与MySQL 数据库的连接。这个数据库表是用ActiveRecord::Base类的set_table_name方法设置的 。这个数据库连接是用ActiveRecord::Base 类的establish_connection 方法建立的。这个模型脚本 catalog.rb如下所示:

require 'active_record'class Catalog "mysql",:host   => "localhost",:username => "root",:password =>   nil,   :database => "test")

在控制器脚本中,为了找回MySQL 数据库中的数据,修改控制其动作的gen_xml。在这个gen_xml 方法 中,创建一个Builder::XmlMarkup 对象。

@xml = Builder::XmlMarkup.new

为了从MySQL 数据库表目录中找回数据,用find(:all) 方法把数据设置在模型脚本中。这个find (:all) 方法能从数据库表中找回所有的的纵列,然后利用find_by_sql(sql)方法去运行特定的SQL语句来 找回数据。

@catalogs=Catalog.find(:all)

完整的控制器脚本显示在下面:

class CatalogController < ApplicationControllerdef gen_xml@xml = Builder::XmlMarkup.new@catalogs=Catalog.find(:all)endend

在views/catalog路径下,把gen_xml.rhtml 观察模板修改成为gen_xml.rxml.。

然后删除之前的gen_xml.rhtml 观察模板。在后边改成的RXML 模板中,利用从数据库中找回的数据来 创建一个XML文件并添加一个XML声明。

@xml.instruct! :xml, :version=>"1.0"

添加一个根元素目录。

@xml.catalogs{}

在根元素中,重述了这个从数据库中获取的数据,并且为结果集中的每一行数据创建目录元素。这个 @catalogs变量是在控制器脚本和从数据库中获取数据的结果集中表现的。举例说,要找回定期刊物的专 栏的值,如下所示:

for catalog in @catalogs@xml.catalog do@xml.journal(catalog.journal)… …end

完整的gen_xml.rxml 文件在显示在下面:

@xml.instruct! :xml, :version=>"1.0"@xml.catalogs{for catalog in @catalogs@xml.catalog do@xml.journal(catalog.journal)@xml.publisher (catalog.publisher)@xml.edition(catalog.edition)  @xml.title(catalog.title) @xml.author(catalog.author)endend}

下一步,运行这个Rails 应用程序来产生一个XML文件。如果还没有开始的话,开始运行这个WEBrick 网络服务器。

C:/ruby/databasexml>ruby script/server

在超链接http://localhost:3000/catalog/gen_xml中调用gen_xml控制器动作,数据从MySQL 数据库 中被获取并且观察模板gen_xml.rxml 被运行。然后,在这个gen_xml.rxml 模板中,一个XML文件产生了 ,像下面的图1那样。

图1:创建XML文件

不如意的时候不要尽往悲伤里钻,想想有笑声的日子吧

在RailsApp上写XML

相关文章:

你感兴趣的文章:

标签云: