UiPath XMLをデータテーブルに変換しCSVデータ化する方法

この記事は、職場の開発担当者向けの内容です。
荒い内容のため、あらかじめご了承いただいた上でお読みください。

# 1.はじめに
ある開発担当者から「システムからダウンロードしたXMLファイル（.xml）を、UiPath Studioを用いてExcelやCSVに変換したい。」という問い合わせがあり、即答できなかったため、自分なりに方法を探してみました。

手法としては、2通り見つけました。
【手法1】Excelで開く方法
【手法2】UiPathでデータ変換

サンプルXMLデータとして、[気象庁ホームページ](http://xml.kishou.go.jp/xmlpull.html)から取得したものを使用します。
（今回は、高頻度フィードの「随時」を取得。）
![2020-11-23_01h22_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/76e19181-eec4-8990-269e-e6143fd0bfbb.png)

【事前準備】
上記の高頻度フィードの「随時」をクリックし、表示されたXMLをコピーし、
メモ帳へ貼り付け、「気象庁.txt」として保存します。
その後、拡張子を「.txt」から「.xml」に変更します。
この「気象庁.xml」データを今回は使用します。
![2020-11-23_01h48_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/e5c0c537-b461-52f5-a40b-97336cd21669.png)


# 2.【手法1】Excelで開く方法
・Excelを起動します。
![2020-11-23_01h24_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/4a563b12-aaa4-8ce9-7083-6c1a03b92a65.png)

・「開く」をクリックします。
![2020-11-23_01h28_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/761b8850-1e4f-0931-f366-ee49dce7b171.png)

・保存したXMLファイルを選択し、開きます。
![2020-11-23_01h30_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/966a9d68-3c4c-6e25-6597-58f4b25ca2e3.png)

・「XMLテーブルとして開く」を選択し、「OK」をクリックします。
![2020-11-23_01h31_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/68ed8370-f45a-cb0a-e4c5-3225ced7d5f8.png)

・メッセージが表示された場合は「OK」をクリックします。
![2020-11-23_01h31_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/c28f3a7a-bfcc-2386-0c51-0a56b7ed2b7d.png)

・データテーブルの形式で展開することができました。
![2020-11-23_01h33_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/93aebefa-3a86-f1c7-016c-b30ce92eba5b.png)
この動作をUiPath Studioで実装すれば簡単にデータテーブル化できそうですね。

・Excelで「名前の管理」を見てみると、「テーブル1」という名前でテーブルが作成されています。
![2020-11-23_01h35_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/4d7aae7c-1451-00b2-14e0-5ba46107d75d.png)

【参考】
UiPath Studioでこの「テーブル1」を使用する場合は、以下のサイトで解説されている方法で対応できます。
**誰でもできる業務改善講座**　[UiPath Excel テーブル範囲を取得 アクティビティ](https://blog-tips.sekenkodqx.jp/2019/12/15/uipath-activity-excel-get-table-range/)

# 3.【手法2】UiPathでデータ変換
様々なサイトで情報収集し、以下の方法を見出しました。
おそらくもっとスマートな手法もあるのだろうと思いますが、今はこのレベルが限界です。
（メソッドの意味や、変数の種類等の質問には答えられません。。。）

・今回は、2つのワークフローを呼び出すこととします。
![2020-11-23_01h44_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/e157fc33-abfc-54dd-66a1-5948e31ee05c.png)

・フォルダ体系
![2020-11-23_01h46_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/6aad5be2-1685-a048-d8ac-b588d7b63e6a.png)

・「10_InputData」フォルダに、あらかじめ「気象庁.xml」を配置。
![2020-11-23_01h47_51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/d690b557-782f-61f3-c618-b2b10ed28c0f.png)


## 3.1.XMLファイルを読込み→CSV出力.xaml
【ワークフロー全体】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/b71c9f70-9d07-beae-2f0b-e7dc721b6d7b.png)

【アクティビティ拡大】
![2020-11-23_01h52_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/441de992-0825-cf5c-3f68-ae2ab90bca8a.png)
![2020-11-23_01h55_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/66d70926-0089-9323-5f96-04e2b9223707.png)
![2020-11-23_01h56_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/45bf0f09-2741-dee7-0479-597bcaa623ee.png)
「メソッドを呼び出し」のプロパティの**パラメーター**を設定。
![2020-11-23_01h57_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/5c69a67c-4bb5-9f00-a692-981690c23966.png)
![2020-11-23_02h03_41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/e93ad31e-5ca1-c3de-c467-e4b65b0d23ae.png)
このワークフローを実行すると、、、
![2020-11-23_02h16_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/2a0e63a8-0946-bdfd-ebe6-28be0b7603e2.png)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
![2020-11-23_02h17_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/587508e3-1c07-1e22-0df0-8d8768eb12f3.png)
6つのCSVが出力されました。
（XMLから6つのデータテーブルを抽出し、それぞれCSVに出力しました。）

内容を確認して、今回、必要と思われるデータを以下の4つと見定めました。
・feed.csv
・entry.csv
・author.csv
・content.csv

## 3.2.CSVを読込み→データテーブルを結合.xaml
【ワークフロー全体】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/6e6bf7c0-af21-34aa-9055-01ef0c74ec0d.png)


【アクティビティ拡大】
まず、それぞれのCSVをDataTableに変換します。
・feed.csv　→　dt_Feed
・entry.csv　→　dt_Entry
・author.csv　→　dt_Author
・content.csv　→　dt_Content
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/9aa0e9ea-5daa-e064-312b-dbefd4f7fb4e.png)
データテーブルを順に結合します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/3a6403f6-4225-f1db-f9b3-d709c6ae13ea.png)

feed.csvとentry.csvで一致する列を探すと、「feed_id」が一致することが分かりました。
![2020-11-23_02h34_49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/32e98f77-803d-04e9-a8c1-f0809950775a.png)
ですので、「データテーブルを結合」アクティビティで、以下のとおり設定し、「dt_FeedandEntry」に結合後のデータテーブルを出力します。
![2020-11-23_02h36_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/9fada903-fa86-bcd6-4241-d4ba7d614773.png)
データテーブル間で一致する列を見つけていき、順に結合していきます。
![2020-11-23_02h39_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/be01dd4e-0bb5-c65b-b06d-cd5190fd36da.png)
![2020-11-23_02h40_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/9e3919ae-635b-878a-4dcf-55f22f99ea24.png)
4つのCSVから作成したデータテーブルを結合し、1つのデータテーブル（dt_full）に出力できましたので、最後にCSVに出力することとします。
![2020-11-23_02h44_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/93381360-ef35-a29f-f3bc-6ad35eb9aaba.png)
このワークフローを実行すると、、、
![2020-11-23_02h45_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/cd98842f-b786-7222-394e-95199b46f2ca.png)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
![2020-11-23_02h47_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/acabeb9e-df67-1a69-5e4a-d23dfae00779.png)
CSVが出力されました。

内容を見てみると、、
![2020-11-23_02h48_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526899/449614db-e195-2615-ffc7-bc7e78cb8a5a.png)
うまく出力できてそうですね。

ちなみに、「データテーブルを結合」アクティビティで、それぞれのデータテーブルに同名の列があった場合は、「（列名）_1」「（列名）_2」といった形で列名に連番がつくようです。

# 4.さいごに
いかがでしたでしょうか。今回は2通りの手法を紹介させていただきました。
動作が安定するのであれば前者の手法（【手法1】Excelで開く方法）をワークフロー化する方が、圧倒的に開発工数は少なそうです。

今回の解説を作成するにあたり、初めてXMLの中身をまじまじと覗くことになり、いろいろと勉強になりました。
みなさんの参考になれば幸いです。