程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在Rails App上寫XML

在Rails App上寫XML

編輯:關於JAVA

在安裝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: mysql
database: test 
username: root 
password: nil
host: 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::Migration
def self.up
create_table :catalogs do |t|
# t.column :name, :string
end
end
def self.down
drop_table :catalogs
end
end

默認的遷移腳本由self.up方法和self.down方法組成。其中,self.up方法被調用來運行一個遷移並且 創建一個數據庫表。轉化自ActiveRecord::Migration類的create_table被用來創建一個數據庫表目錄。 ActiveRecord用來以復數形式映射一個模型類到一個數據庫表中。這個模型類是單數的,大寫的;數據庫 表卻是復數而且是小寫的。在Ruby on Rails應用程序的例子中,這個模型類是Catalog,數據庫表是 catalogs。

修改這個遷移腳本001_create_catalogs.rb 去創建一個數據庫表並且添加數據到表中。在 create_table轉化中,用定期刊物的專欄、出版者、題目和作者來創建一個表目錄,如下所示:

class CreateCatalogs < ActiveRecord::Migration
def self.up
create_table :catalogs do |t|
t.column :journal, :string, :limit => 255
t.column :publisher, :string, :limit => 255
t.column :edition, :string, :limit => 255
t.column :title, :string, :limit => 255
t.column :author, :string, :limit => 255
end
Catalog.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"
end
def self.down
drop_table :catalogs
end
end

用rake. rake運行這個遷移腳本和在J2EE中運行Ant有相似之處。Rails 提供了一個叫做遷移的目標去 運行遷移。

C:/ruby/databasexml>rake migrate

這個數據庫表目錄是在MySQL 數據庫中被創建的。下面,創建一個控制器腳本,包括一個控制器動作 gen_xml,以便從數據庫表中產生一個XML文件。

C:/ruby/databasexml>ruby script/generate
controller 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 < ActiveRecord::Base
set_table_name "catalogs"
end
ActiveRecord::Base.establish_connection(
:adapter => "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 < ApplicationController
def gen_xml
@xml = Builder::XmlMarkup.new
@catalogs=Catalog.find(:all)
end
end

在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)
end
end
}

下一步,運行這個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文件

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved