Help us understand the problem. What is going on with this article?

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

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

1.はじめに

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

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

サンプルXMLデータとして、気象庁ホームページから取得したものを使用します。
(今回は、高頻度フィードの「随時」を取得。)
2020-11-23_01h22_22.png

【事前準備】
上記の高頻度フィードの「随時」をクリックし、表示されたXMLをコピーし、
メモ帳へ貼り付け、「気象庁.txt」として保存します。
その後、拡張子を「.txt」から「.xml」に変更します。
この「気象庁.xml」データを今回は使用します。
2020-11-23_01h48_56.png

2.【手法1】Excelで開く方法

・Excelを起動します。
2020-11-23_01h24_10.png

・「開く」をクリックします。
2020-11-23_01h28_22.png

・保存したXMLファイルを選択し、開きます。
2020-11-23_01h30_02.png

・「XMLテーブルとして開く」を選択し、「OK」をクリックします。
2020-11-23_01h31_04.png

・メッセージが表示された場合は「OK」をクリックします。
2020-11-23_01h31_58.png

・データテーブルの形式で展開することができました。
2020-11-23_01h33_31.png
この動作をUiPath Studioで実装すれば簡単にデータテーブル化できそうですね。

・Excelで「名前の管理」を見てみると、「テーブル1」という名前でテーブルが作成されています。
2020-11-23_01h35_54.png

【参考】
UiPath Studioでこの「テーブル1」を使用する場合は、以下のサイトで解説されている方法で対応できます。
誰でもできる業務改善講座 UiPath Excel テーブル範囲を取得 アクティビティ

3.【手法2】UiPathでデータ変換

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

・今回は、2つのワークフローを呼び出すこととします。
2020-11-23_01h44_28.png

・フォルダ体系
2020-11-23_01h46_53.png

・「10_InputData」フォルダに、あらかじめ「気象庁.xml」を配置。
2020-11-23_01h47_51.png

3.1.XMLファイルを読込み→CSV出力.xaml

【ワークフロー全体】
image.png

【アクティビティ拡大】
2020-11-23_01h52_58.png
2020-11-23_01h55_19.png
2020-11-23_01h56_23.png
「メソッドを呼び出し」のプロパティのパラメーターを設定。
2020-11-23_01h57_31.png
2020-11-23_02h03_41.png
このワークフローを実行すると、、、
2020-11-23_02h16_16.png
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
2020-11-23_02h17_31.png
6つのCSVが出力されました。
(XMLから6つのデータテーブルを抽出し、それぞれCSVに出力しました。)

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

3.2.CSVを読込み→データテーブルを結合.xaml

【ワークフロー全体】
image.png

【アクティビティ拡大】
まず、それぞれのCSVをDataTableに変換します。
・feed.csv → dt_Feed
・entry.csv → dt_Entry
・author.csv → dt_Author
・content.csv → dt_Content
image.png
データテーブルを順に結合します。
image.png

feed.csvとentry.csvで一致する列を探すと、「feed_id」が一致することが分かりました。
2020-11-23_02h34_49.png
ですので、「データテーブルを結合」アクティビティで、以下のとおり設定し、「dt_FeedandEntry」に結合後のデータテーブルを出力します。
2020-11-23_02h36_27.png
データテーブル間で一致する列を見つけていき、順に結合していきます。
2020-11-23_02h39_16.png
2020-11-23_02h40_54.png
4つのCSVから作成したデータテーブルを結合し、1つのデータテーブル(dt_full)に出力できましたので、最後にCSVに出力することとします。
2020-11-23_02h44_15.png
このワークフローを実行すると、、、
2020-11-23_02h45_55.png
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
2020-11-23_02h47_00.png
CSVが出力されました。

内容を見てみると、、
2020-11-23_02h48_26.png
うまく出力できてそうですね。

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

4.さいごに

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

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

masaru9624
職場でAI-OCR、RPA等の導入推進をしています。 デジタルトランスフォーメーション、BPRといった言葉が好物です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away