前提
–XMLとは
– XML(Extensible Markup Language)は、データの保存と転送に使用されるマークアップ言語です。
HTMLと似ていますが、HTMLがウェブページの表示を目的としているのに対し、XMLはデータの構造を表現することを目的としています。XMLは階層的な構造を持ち、タグを使用してデータを記述します。
-JSONとの比較
| 特性 | XML | JSON |
|—————–|————————————|————————————|
| 構造 | 階層的(ツリー構造) | キーと値のペア(ネスト可能) |
| シンタックス | タグ(<>) | ブレースとブラケット({},[]) |
| 可読性 | 冗長になりがちだが直感的 | 簡潔で読みやすい |
| データ型 | 文字列(型を明示するためにはスキーマ(XSDなど)を使用する必要があるが、複雑なデータ型も利用できる) | 数値、文字列、ブール値、配列、オブジェクト |
| パフォーマンス | 解析に時間がかかる | 軽量で迅速に解析可能 |
一般的にAPI、モバイルアプリ、データストレージには JSON の方が適していますが、データ交換を必要とする複雑な文書構造にはXMLが適していると言われています。
実例
– XMLデータから値取得
– 全体像
Uipathのソースは下記画像になり、指定した郵便番号で住所検索APIを実行します。
都道府県市区町村情報を取得してメッセージボックスで表示します。郵便番号は1050001でテストいたします。
– サンプルデータ
今回は HeartRails Geo API(https://geoapi.heartrails.com)郵便番号による住所検索で取得出来るXML形式のデータを利用いたします。
– 取得対象データ
Uipathの「HTTPClient」(下記画像の左)で HeartRails Geo API を利用して取得できるデータが下記画像の右になります。
この中から **prefecture = 東京**、**city = 港区**、**town = 虎ノ門** の値を取得し、郵便番号に対する都道府県市区町村情報をメッセージボックスで出力したいと思います。
XMLの構造としてはすべての要素を含んでいるルート要素が **response要素** になります。子要素として **location要素** があり場所に関する情報を格納しております。
– オブジェクト化
取得した上記データを「XMLを逆シリアル化」アクティビティを使用し、文字列から XDocument オブジェクトを作成します。
オブジェクト化することでデータテーブル型の変数のようにデータの取得や加工がしやすくなります。
– データ取得
作成した XDocument からデータを取得します。
Elementメソッドを使用することで最初に一致する子要素を取得することができます。
response > location > prefecture という構造になっている場合、ルート要素の **response要素** と目的の要素を格納している **location要素** を指定し、目的の値を格納している **prefecture要素** まで指定することで取得することができます。
要素を指定したらValueプロパティを使用して要素から値のみを取得します。
(代入右辺)
* xmlObj.Element(“response”).Element(“location”).Element(“prefecture”).value
* xmlObj.Element(“response”).Element(“location”).Element(“city”).value
* xmlObj.Element(“response”).Element(“location”).Element(“town”).value
– 実行
出力することが出来ました。
今回はXML形式のデータから値を取得する方法をご紹介いたしました。
階層構造により取得方法を工夫する必要がありますので、APIのレスポンスや文書構造に合わせてカスタマイズいただければと思います。