LoginSignup
2
0

【HTTP要求アクティビティ】XMLフォーマットの扱い方メモ

Last updated at Posted at 2023-08-09

はじめに

  • 本記事は、HTTP要求アクティビティをXML形式で利用した際のメモです。
  • XML関連のアクティビティは「Windows - レガシ」プロジェクトで動作します。 私が確認する限り、.NET6系の「Windows」プロジェクトでは Element の操作等で期待結果が得られません。
  • 例示のため、Geocoding.jp API をつかわせていただいています。
  • 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
  • 製品仕様や参考画像は 23.4 バージョンで構成しています。

XML とは

次のサンプルの様に、見た目はHTMLっぽい感じで、値が項目名のタグに囲われています。
後述するアクティビティが何のためのものかをイメージしやすくするために、「ノード」と「属性」の対応も図解・補足します↓↓
XML_HTTP要求0.JPG

HTTP要求アクティビティでの操作メモ

プロパティ(設定)

「本文形式」や「受け入れ形式」にXML形式を指定します。
image.png
image.png
「本文(リクエストボディ)」にXML形式のパラメータをセットしますが、先のサンプルでいう

<?xml version="1.0" encoding="UTF-8" ?>

は不要なのでご注意ください。※ルートノード以下を指定します。

「本文」へはエディタで改行コードを除いたテキストを指定しても、Environment.Newline や vbCrLf 等で改行したものを指定してもOKです。

<result><version>1.2</version><address>志村坂上</address><coordinate><lat>35.775769</lat><lng>139.695387</lng><lat_dms>35,46,32.769</lat_dms><lng_dms>139,41,43.395</lng_dms></coordinate><coordinate_tokyo><lat>35.772544</lat><lng>139.698605</lng><lat_dms>35,46,21.16</lat_dms><lng_dms>139,41,54.977</lng_dms></coordinate_tokyo><open_location_code>8Q7XQMGW+85</open_location_code><url>https://www.geocoding.jp/?q=%E5%BF%97%E6%9D%91%E5%9D%82%E4%B8%8A&amp;d=tokyo</url><needs_to_verify>yes</needs_to_verify><google_maps>志村坂上駅</google_maps></result>
(例)
"<result>" + Environment.Newline + 
"<version>1.2</version>" + Environment.Newline + 
"<address>志村坂上</address>" + Environment.Newline + 
・・・

アクティビティの記述(設定内容)に不安がある場合、別のツールなどでリクエストを試すのをお勧めします。(以下は、curlコマンドの参考記事)

データ(値)取得

データの取得方法を説明するため、今回は Geocoding.jp API を使わせていただきます↓↓
XML_HTTP要求2.JPG
簡単なリクエストを送信するだけでXML形式のレスポンスを得られます↓
XML_HTTP要求4.JPG
お馴染みHTTP要求を配置し、とりあえずレスポンス(応答コンテンツ)のXMLを受け取ります。
XML_HTTP要求7.JPG
XML_HTTP要求8.JPG
次に、「XMLを逆シリアル化」をもちいて XDocument というオブジェクトをつくります。
そして、「XMLノードを取得」で先に XDocument 化した XMLオブジェクトをさらに XMLノードオブジェクトにします。
XML_HTTP要求9.JPG
XMLノードオブジェクトを繰り返しで出力するとこう↓
XML_HTTP要求10.JPG

次に、任意の項目の値の取り方。
ノード2 の「coordinate」の「lat」の値をとりたい場合、繰り返し(コレクションの各要素)のインプットに
XMLドキュメント.Element("result").Elements("coordinate")
を、TypeArgument に『System.Xml.Linq.XElement』を指定します。
あとは『item.Element("lat").Value.ToString』の様に記述すれば値取得できます。
XML_HTTP要求12.JPG
最後に「XMLノード属性を取得」について
XML_HTTP要求14.JPG
今回使ったWebAPIのレスポンスには属性が含まれていなかったので、公式ガイドのサンプルで補足します。
読み込むXMLの最初のノードの「title」が属性情報を持っています。
XML_HTTP要求15.JPG
XMLノード属性オブジェクトを生成したら、あとはインデックスとメソッド(項目名:.Name / 値:.Value)を指定するだけ
XML_HTTP要求13.JPG

おまけ

Windowsプロジェクトで開発中、またはWebAPIサービス側の仕様とのミスマッチ等で XDocument の操作で期待結果が得られないときは、スマートではありませんが「一致する文字列を取得」アクティビティなどでとりあえず回避実装することもできます。
XMLは項目名のタグで括られているので、「<タグ名>.*?タグ名>」を出力して、「{出力変数}.Replace("<タグ名>","").Replace("タグ名>","")」で値を取得することもできます。
XML_HTTP要求16.JPG

値のデータ長などが固定の場合は、「応答コンテンツ.Substring(応答コンテンツ.IndexOf("<タグ名>"),12)」などと記述することで簡単に取得してもよいかもしれません。
XML_HTTP要求17.JPG

参考ガイド

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0