EAI/ETL技術者のブログ

  • サポセンブログ
2023.10.30

XPathを制する者はXMLデータを制する!?

XPathを制する者はXMLデータを制する!?

DataSpider Servistaで複雑な情報加工を行う上で、XPathの知識は大変役に立ちます。



DataSpider Servistaでは加工処理を行う場合、以下2種類のデータ形式が利用されます。

  • テーブルモデル型:データベースやテキストデータを扱う際に使用されるテーブル形式のデータ
  • XML型(※):クラウドなどとのデータ連携で扱うXML形式のデータ

最近ではクラウドとのデータ連携でDataSpiderを活用いただくシーンが多くなり、DataSpiderの加工処理ではXML型でのデータ形式がよく利用されます。
※DataSpiderではJSONデータを加工する場合もXML型と呼ばれる統一的なデータ形式として表現・取り扱いされます。

しかしながらXML型のデータはテーブル型の場合と比べて構造が複雑であり、その取り扱いも難しいという印象を抱かれている方も多いのではないでしょうか。

XMLデータのデータ抽出は一癖あり

XMLデータから特定の位置にあるデータを抽出することを考えてみましょう。

上記は、「山田太郎」さんが入社以来4回部署異動していることが記録されているXMLデータで、例えばこの中から最終の異動先部署コードや異動日の情報を抽出したり、入社以来からの異動回数を数えたい、という場面をことを考えてみましょう。

最終の異動日は「2018/04/01」で異動回数は合計4回でということがわかりますが、これを実際にDataSpider Servistaに抽出させるとなると、通常の処理で複数件のデータの中から最終データを選択的に抽出したり、件数をカウントするのは簡単そうではあるものの、その実装が即座にイメージできない方も少なくないと思います。

ここで活躍するのがXPathというものです。

XMLデータの加工にはXPathが便利

XPathとは端的に言うと、「XML文書内の要素を指定・抽出するためのクエリ言語」です。

DataSpider Servistaでは「XPathによる値の取得」ロジックアイコンでXPathをご利用いただけます。
具体的には、ドキュメントMapper編集画面において、
 [ツールパレット]-[基本]-[XPathによる値の取得]
にあります。

ここで、DataSpiderのドキュメントMapperでの定義例を示します。
以下はXMLファイルを読み込んだ直後のMapperの内容です。
※右側にはCSVファイルへの出力データが存在します。

Mapperの定義内容でまず最初に注目したいのは、左側の入力データから右側の出力データへ一直線に線が引かれている以下の4つの項目です。
 - 社員番号
 - 氏名
 - 入社時部署コード
 - 入社年月日

これらの項目は繰り返される項目ではなく、1つのXMLファイルに1回限り登場するデータであるため、その抽出はシンプルに線を引くだけで可能です。

しかし、今回欲しいのは特に「異動」に関する項目であり、「異動」に関する項目は、複数回繰り返されるため、線を引くだけでは抽出できないことに気が付きます。

そこで、XPathによる値の取得アイコンを使用します。

XPath式は、前に少し触れましたが「XML文書内の要素を指定・抽出するためのクエリ言語」で、XMLデータ内の特定レコードを柔軟に抽出することが可能です。
例えば、1回目の異動レコードを抽出する場合、このように設定して抽出可能です。
 /root/異動[1]/異動先部署コード
また、XPathには関数も用意されており、番号指定以外の抽出条件も指定することが可能です。

XPath関数の使用例

今回、ご紹介するのは、last()関数count()関数です。

上記の場合、"/root/異動" の階層内で最後(一番下)のものの中から異動先部署コードを抽出します。
※数値指定であれば、/root/異動[N]/異動先部署コード に相当するものですが、
この最も大きい「N」を自動的に取得してくれるのがlast()関数です。


異動日についても、以下の通りに同様です。

次に、count()関数です。
これは、"/root/異動" という階層が何回繰り返されるのか、XMLデータから読み解いてその値を返してくれます。

例示のドキュメントMapperからCSVファイルに出力した場合ですと、以下のように最終異動に関する情報と異動回数が出力されていることがわかります。

まとめ

XPathはXMLの世界では一般的なツールであり、これをDataSpider Servistaの中で活用することでXML関連のデータ加工が楽になることが垣間見えたかと思います。

ぜひご活用ください。

アシストでは、お客様のスピーディな自己解決を支援するため、FAQの「改善」「作成」に常に力を入れています。2022年6月時点での、DataSpiderの公開FAQ数は2600超となります。現在公開中のサンプルスクリプトにつきましては、さらに内容を分かりやすくお客様へお届けできるよう創意工夫して参りますので、今後ともどうぞご期待ください!
なお、本件のサンプルスクリプトは、FAQ No.「66613」に添付されているので、お客様の環境で実際に検証いただくことが可能です。

FAQの参照には、サポートWebサイトへアカウント登録が必要です。これからアカウント作成される方は、以下の『AWSC-2』ご紹介サイトよりアカウントの登録をお願いいたします。

https://www.ashisuto.co.jp/support/awsc2/

執筆者情報:

執筆者 新宮 英之

新宮 英之 (しんぐう ひでゆき)
サポートサービス技術本部 本部付 DX推進サポート部

DataSpider Servistaをはじめ、Data Integration製品のサポートエンジニアを担当。
私生活では一児の父。

関連している記事

  • サポセンブログ
2024.02.15

そうぞうしてみようmappingの世界

DataSpiderでデータの加工やフィルターを作成時に利用する「マッピング」の裏側で流れているデータの構造や流れについての動画を作成してみました。

  • サポセンブログ
2023.09.11

kintoneアダプタ「テーブル連携アイコンの使いどころ」

kintoneアダプタの3種類のアイコン、「読み取り」「書き込み」「データ削除」についてご紹介。

  • サポセンブログ
2022.06.22

サンプルスクリプト講座「CSVファイルをJSON形式に変換する方法」(5分8秒)

お客様の課題解決を早めるため、アシストサポートWebサイトではFAQを日々更新しています。本記事では、FAQの中で特に人気の「CSVファイルをJSON形式に変換する方法」について動画も合わせてご説明いたします。

ページの先頭へ戻る