
今回は、ASTERIAでもうちょっと複雑に名前空間を指定してみようと思います。
これまでは名前空間の指定は xmlns=名前空間 という感じで指定していましたが、 xmlns:Prefix=名前空間 という指定の方法もあるらしいので、それがどうなるか実験してみます。
■ 読込
今回の読込データは下記を使用します。名前空間を2つ用意して、基本は a 、field3だけ b を使うようにします。
<?xml version="1.0" encoding="utf-8"?>
<root>
<a:record xmlns:a="http://harikofu.co.jp/a/" xmlns:b="http://harikofu.co.jp/b/">
<a:field1>あ</a:field1>
<a:field2>い</a:field2>
<b:field3>う</b:field3>
</a:record>
</root>
このxmlファイルを読込む定義はこんな感じです。

名前空間が複数ある場合、単純に数の分だけ増やせば良いです。各項目の先頭に付けるPrefixも、きちんと定義します。
Mapperの方は名前空間を取っ払って読み込むようにします。

これで実行したところ、名前空間 a、b ともに値が読込めたことが確認出来ました。

■ 書込み(固定)
今度は書込みの実験です。名前空間のないxmlファイルを用意して読み込んで、それに名前空間を2つくっつけて出力するようにしてみます。
読込データは下記の内容とします。
<?xml version="1.0" encoding="utf-8"?>
<root>
<record>
<field1>あ</field1>
<field2>い</field2>
<field3>う</field3>
</record>
</root>
FileGetコンポーネントで読み込みます。

名前空間の設定が固定で良いのであれば、Mapperコンポーネントのストリームでガチガチに固めれば良いです。この辺りの定義は読込と同じです。

マッピングもこれだけです。

実行結果です。うん、定義通りに名前空間 a、b が設定されています。

■ 書込み(浮動)
今度は、Mapperで名前空間を書き換えてみます。入力データとFilegeGetまでは同じ作りにして、Mapperを変えます。
名前空間 a、b の2つを定義して、そこに設定する値を書き換える処理とするので、ストリームの定義は、こうします。

名前空間の定義そのものをどうにかするのは出来なかったので、適当な値を詰めて a、b を定義しました。
そして、Mapperで値を設定できるようにrootタグの下に名前空間 a、b の設定用項目を追加します。
Mapperの中のConstで名前空間 a、b に http// 〜 の値を設定します。

もちろん、フィールドの転記もしておきます。

これを実行すると、rootタグに名前空間の値(http// 〜)が設定されたストリームが出来ました。

ちょっと気に入らないのが、項目に設定する名前空間を任意に設定する方法が分からなかったこと。
上の例だと field3 の名前空間は b ですが、Mapperで a にするという制御が出来なかったのです。
・・・まぁ、そんな複雑なxmlファイルを作ってどうするんだって話ですし、それをするくらいなら処理を分岐した方が良い気もしますがね。
■ 後書き
ちなみに、xmlns=名前空間 という定義と、xmlns:Prefix=名前空間 という定義を混在させた場合、Prefixを指定しない項目はすべて前者の名前空間を使用するという意味になるらしいです。
つまり、初期値って扱いですかね。
個人的には、そこまで細かく指定する必要があるxmlファイルってどうなのかって思いますけどね。
前回:ASTERIAでxml文書を扱ってみたNo4 書込(名前空間)
次回:ASTERIAでxml文書を扱ってみたNo6 身も蓋もない話
最新の記事:http://harikofu.blog.fc2.com/
投稿記事の一覧:http://harikofu.web.fc2.com/
--- blog end ---
スポンサードリンク


