社内SEの徒然なる日記

ASTERIAでxml文書を扱ってみたNo3 読込(名前空間)

■ ASTERIAxmlファイルを読込(名前空間

前回はASTERIAxml形式のテキストデータを読み込んでみたのですが、名前空間を指定したデータが読めませんでした(ASTERIAでxml文書を扱ってみたNo2 読込)。どうやら、名前空間の指定がある場合はストリームにきちんと定義しないとダメみたいです。

ってことで、今回はそのあたりのお話です。

■ 定義

前回のテストデータはこんな感じ。
<?xml version="1.0" encoding="utf-8"?>
<root>
<record xmlns="http://harikofu.co.jp/test/">
<field1>あ</field1>
<field2>い</field2>
<field3>う</field3>
</record>
<record>
<field1>か</field1>
<field2>き</field2>
<field3>く</field3>
</record>
</root>


名前空間の指定によって、同じ項目名でも別物として扱われるという話なので、1行目と2行目はまったく別のデータとなるということでしょうか。

では、ASTERIAの定義を変更してみました。
ASTERIAでxml文書を扱ってみたNo3 - 1

名前空間ですが、定義はこんな感じで表現されるようです。URIは名前空間の値でxmlファイルの中に書かれている値になっています。
ASTERIAでxml文書を扱ってみたNo3 - 2

Prefix(プリフィックス)は、・・・何というか表現が難しいですが、この場合だとASTERIAのストリームの定義内だけで使う変数名みたいなものでしょうか。

んで、フィールドの定義では、項目名の前に設定する名前空間のPrefixを Prefix:フィールド名 という書式で設定するらしいです。

データ上はrecordタグに名前空間を指定しているので、それにぶら下がっている全ての項目に設定します。

上記の定義をCSVレイアウト編集で確認します。名前空間の定義を先頭行に追加するだけで、後は見た通りです。
ASTERIAでxml文書を扱ってみたNo3 - 3

実行すると、名前空間を指定した1行目だけが取得できました。
ASTERIAでxml文書を扱ってみたNo3 - 4

前回(ASTERIAでxml文書を扱ってみたNo2 読込)は、2行目だけが取得できていたので逆になった感じです。うん、少しずつ分かってきました。

■ 後書き

2行とも読み込むのであれば(普通は読み込むだろうけど)、recordタグを名前空間を指定したものと、指定しないものの2つ定義すれば良いだけです。

イメージはこんな感じ。出力側(右側)は名前空間を指定していないので、2行目のrecordの名前をrecord2として定義しています。
ASTERIAでxml文書を扱ってみたNo3 - 5

実行すると、こんな感じ。
ASTERIAでxml文書を扱ってみたNo3 - 6

前回:ASTERIAでxml文書を扱ってみたNo2 読込
次回:ASTERIAでxml文書を扱ってみたNo4 書込(名前空間)

最新の記事:http://harikofu.blog.fc2.com/
投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end --- スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する