Ruby のブロックを使って XML を作るクラス
あたりまえのことなんですが、html ってこんな風に書くじゃないですか、
気をつけて書けばいいんでしょうが、タグが多くなってくると、(これは例なので少ないけど、)
こんな風に div と p の入れ子がおかしなことになったり、閉じタグを間違って書いちゃったりします。この例だと body の閉じタグも間違ってます。
チェックすればいいんだけど、めんどうなんで、出来れば生の XML や HTML は触りたくない。
そこで、Ruby でこういう風に書ければ便利かなと思って作りました。 タイプ量は増えちゃいますが...
これを実行すると、以下のようにデフォルトでは 2 文字でインデントします。また、テキストの両側に不要なスペースや改行文字を付けません。
Tenarai::XML.new と to_s の引数にインデント文字数を指定できるので、例えば最初の方の new するところをこうするか、
あるいは、最後の行を、
とすると、
インデントしないで、こんな風に一行にします。
このモジュールを書いた後、どっかで同じようなものを見たような気がするんですが、書いてしまったものはしょうがない。もったいないので、使うことにします。
それぞれ、オブジェクトを作成します。引数のハッシュオブジェクトにデフォルトのインデント文字数を指定することが出来ます。また、ブロックを指定した場合は、ブロックの引数に作成したオブジェクトが代入されます。
xml 宣言を作成します。
サンプルコード
実行結果
<?xml version="1.0" encoding="utf-8"?>
DOCTYPE 宣言を作成します。
サンプルコード
実行結果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
それぞれタグオブジェクト (Tenarai::XML::Tag) を作成します。引数としてタグのアトリビュートを指定した Hash オブジェクトを渡すことができます。ブロックを指定した場合は、ブロックの引数に作成したタグオブジェクトが代入されます。
タグオブジェクトの [], []= メソッドでアトリビュートを操作できます。
Tenarai::XML::Tag クラスは Tenarai::XML クラスを継承しているので、Tenarai::XML クラスのメソッドを使ってタグを入れ子にしたり、テキストノードを作成したりすることができます。
サンプルコード
実行結果
テキストを作成します。< や > などは to_s したときにエスケープされます。
空白文字を に変換することはしません。というのも、 の場合はブラウザが自動改行してくれないので、ものすごく長い一行になってしまうことになるので。
サンプルコード
実行結果
テキストを作成します。< や > などは to_s してもそのまま出力されます。
サンプルコード
実行結果
escaped_text と同じでテキストを作成しますが、to_s したときに code の最初と最後に改行文字を付けます。escaped_text だとJavaScript を埋め込んだときに JavaScript コードの最初と最後が script タグにくっついてしまい、見栄えが良くないので用意したメソッドです。ただそれだけ。
実行結果
<!-- --> で囲われたコメントを作成します。
実行結果
CDATA セクションを作成します。
実行結果
オブジェクトを XML に整形した文字列を返します。引数にインデントの文字数を指定することができます。
実行結果
to_s のエイリアスです
[PageInfo]
LastUpdate: 2008-04-11 20:47:28, ModifiedBy: junkikuchi
[Permissions]
view:all, edit:members, delete/config:members