自分のブログは三日坊主な okita です。
今回は「GeneXus で XML の出力」!!
情報共有したいとかそんな目的ではなく、
自分の中で情報をまとめたかっただけなので書きたいように書きます
・・・一応 Blog のコトも考えてますよw
まずはXMLファイル作成から!
とりあえず下記にソースコードをド━(゚Д゚)━ン!!
一応プロシージャで作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
// 日付を取得 &Date = &Today // (1) XML を開く &XMLWriter.Open("sample.xml") // (2) エンコーディング等 の設定 既定値は「ISO-8859-1」 &XMLWriter.WriteStartDocument("UTF-8",true) // (3) DOCTYPE の設定 &XMLWriter.WriteDocType('Root','!ELEMENT root (data)* ') &XMLWriter.WriteDocTypePublic('Root','Sample', 'http://www.sample.com/Sample.dtd') &XMLWriter.WriteDocTypeSystem('Root','Sample.dtd') // (4) Element を設定 &XMLWriter.WriteStartElement('Element') // (5) (4)のElement に対して Attribute を設定 &XMLWriter.WriteAttribute('Date',&Date.ToFormattedString()) // (6) (4)のElement に対して 子Element を設定 &XMLWriter.WriteElement('DATE',&Date.ToFormattedString()) // (7) コメントを追加 &XMLWriter.WriteComment('(7)のコメントです) // (8) CDATAセクション を使ってテキストを追加 &XMLWriter.WriteCData('x < 0の場合とか・・・・') // (9) テキストを追加 ⇒ 特殊文字は文字シーケンスで置き換える &XMLWriter.WriteText('x < 0の場合とか・・・・') // (10) テキストを追加 ⇒ 特殊文字は文字シーケンスで置き換えない &XMLWriter.WriteRawText('x < 0の場合とか・・・・') // (11) Element を設定 ⇒ (4)とやってるコトは同じ &XMLWriter.WriteStartElement('MEMBERS') // 12回ループ For &i = 1 to 12 // (12) (11)のElement に対して 子Element を設定 ⇒ (6)とやってるコトは同じ &XMLWriter.WriteElement('NUMBER',&i.ToFormattedString()) Endfor // (13) (11)のElement に対しての終了 &XMLWriter.WriteEndElement() // (14) (4)のElement に対しての終了 &XMLWriter.WriteEndElement() // (15) XML 終了 &XMLWriter.Close() |
今回はキャプチャとか無しです
かわりにソースコード用のプラグインをブログ管理者に入れてもらったので、そのプラグインをフル活用!!!
■変数(Variables)
・&XMLWriter ⇒ XMLWriter型の変数です
・&Date ⇒ Date型の変数です
—————————————
■(1) XML を開く
&XMLWriter.Open(“sample.xml”)
引数には XMLファイルを出力するパスを指定します。
ファイル名だけでも問題はないですが
ファイル名だけだとよくわからん場所にXMLが出力されるので注意!
Java & Tomcat で実行したら
『C:\Program Files\Apache Software Foundation\Tomcat 6.0』ここの配下に
『sample.xml』が作成されていた(´・ω・`)メイワク
—————————————
■(2) エンコーディング等 の設定 既定値は「ISO-8859-1」
&XMLWriter.WriteStartDocument(“UTF-8”,true)
引数にはエンコーディングとスタンドアロンの設定を指定します。
エンコーディングの既定値は「ISO-8859-1」
XMLのスタンドアロンってなんですか( ゚д゚)???
XML宣言のstandalone属性(lucky bag 様)
http://www.lucky-bag.com/archives/2005/01/xmlstandalone.html
つまり外部DTDの参照が必要か不要かを設定できる場所ということですね
ちなみに standalone=”yes” の場合は外部DTDを参照する必要がないということだそうです。
まぎらわしいな。。。
—————————————
■(3) DOCTYPE の設定
&XMLWriter.WriteDocType(‘Root’,’!ELEMENT root (data)* ‘)
&XMLWriter.WriteDocTypePublic(‘Root’,’Sample’, ‘http://www.sample.com/Sample.dtd’)
&XMLWriter.WriteDocTypeSystem(‘Root’,’Sample.dtd’)
今回はサンプルなので3タイプ全部書いてますが普通は1個だけ・・・だと思います。
DOCTYPE ってなんですか( ゚д゚)???
このへんで XML について知らんコトが多いと気付き始めました。
DTD(Document Type Definition)(ひしだま’s 技術メモページ 様)
http://www.ne.jp/asahi/hishidama/home/tech/xml/dtd.html
簡単に言うと、どのDTDファイルを使うかを指定する。というコトです。
&XMLWriter.WriteDocType(‘Root’,’!ELEMENT root (data)* ‘)
これに関しては2個目の引数に直接 DTD の内容を指定できるようですね
—————————————
■(4) Element を設定
&XMLWriter.WriteStartElement(‘Element’)
エレメントっていうのはこんなのです
<Element> ← こんなの
—————————————
■(5) (4)のElement に対して Attribute を設定
&XMLWriter.WriteAttribute(‘Date’,&Date.ToFormattedString())
<Element Date=”2014/01/29″>
前のエレメントのアトリビュートを指定できます。
—————————————
■(6) (4)のElement に対して 子Element を設定
&XMLWriter.WriteElement(‘DATE’,&Date.ToFormattedString())
特に説明なし!
—————————————
■(7) コメントを追加
&XMLWriter.WriteComment(‘(7)のコメントです’)
XMLにコメントを入れるコトができます。
—————————————
■(8) CDATAセクション を使ってテキストを追加
&XMLWriter.WriteCData(‘x < 0の場合とか・・・・’)
CDATA ってなんですか( ゚д゚)???
CDATAセクション(@IT 様)
http://www.atmarkit.co.jp/aig/01xml/cdata.html
CDATAセクションを使用するとどんな文字でも使っていいらしい!
一部例外があるらしいが細かいコトはいいや!
—————————————
■(9) テキストを追加 ⇒ 特殊文字は文字シーケンスで置き換える
&XMLWriter.WriteText(‘x < 0の場合とか・・・・’)
< とかは < になります。
—————————————
■(10) テキストを追加 ⇒ 特殊文字は文字シーケンスで置き換えない
&XMLWriter.WriteRawText(‘x < 0の場合とか・・・・’)
(9) とはちょっとだけ違って文字列がそのまま出力されます。
—————————————
■(11) 、(12)は同じコトやってるので割愛
—————————————
■(13) (11)のElement に対しての終了
&XMLWriter.WriteEndElement()
</MEMBERS> ← スラッシュがついた終了タグを出力します
—————————————
■(14) (4)のElement に対しての終了
&XMLWriter.WriteEndElement()
—————————————
// (15) XML 終了
&XMLWriter.Close()
ここでXML操作完了です!
—————————————
長い、まさかこんな長くなるとは・・・・
こんな長くなるならまとめなかったのに(´・ω・`)
とりあえずこの作成したプロシージャを画面から Call してあげると・・・
どこかに 「sample.xml」が出力されます。
Java & Tomcat なら Tomcat の中にあるはず・・・
C# IIS なら Models の中の実行してるシステム の中かな?
ということでコレで一応XMLファイルの出力はできた・・・・はず!?
次回はファイルじゃなくて
バッファー上にXMLを作成する方法をやります
・・・上記のソースの一部を変更するだけなのですぐアップする予定です。
ではでは。以上。
以下別サイトへのリンク
■XMLWriter (wiki.genexus.jp 様)
http://wiki.genexus.jp/hwiki.aspx?XMLWriter+%E3%83%87%E3%83%BC%E3%82%BF+%E3%82%BF%E3%82%A4%E3%83%97
■XML宣言のstandalone属性(lucky bag 様)
http://www.lucky-bag.com/archives/2005/01/xmlstandalone.html
■DTD(Document Type Definition)(ひしだま’s 技術メモページ 様)
http://www.ne.jp/asahi/hishidama/home/tech/xml/dtd.html
■CDATAセクション(@IT 様)
http://www.atmarkit.co.jp/aig/01xml/cdata.html
最後にコレ↓が出力されたXMLです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <!DOCTYPE Root [!ELEMENT root (data)* ]> <!DOCTYPE Root PUBLIC "Sample" "http://www.sample.com/Sample.dtd"> <!DOCTYPE Root SYSTEM "Sample.dtd"> <Element Date="2014/02/11"> <DATE>2014/02/11</DATE> <!--(7)のコメントです--> <![CDATA[x < 0の場合とか・・・・]]> x &lt; 0の場合とか・・・・x < 0の場合とか・・・・ <MEMBERS> <NUMBER>0001</NUMBER> <NUMBER>0002</NUMBER> <NUMBER>0003</NUMBER> <NUMBER>0004</NUMBER> <NUMBER>0005</NUMBER> <NUMBER>0006</NUMBER> <NUMBER>0007</NUMBER> <NUMBER>0008</NUMBER> <NUMBER>0009</NUMBER> <NUMBER>0010</NUMBER> <NUMBER>0011</NUMBER> <NUMBER>0012</NUMBER> </MEMBERS> </Element> |
以上です。