UiPath Studio 2019.5.0 で XML の NodeList を処理する方法

この記事は公開されてから時間が経っています

ちょっと、面倒なので RPA で XML を処理させようと思ったんだけど、XML の ノードリストを処理する方法が全然解らなくて難儀しました
だから、忘れないように書いておこう!

普通に XML を処理できる様になるまでも難儀しました

XML を読み込む準備

XML を直接読み込めないので、テキストファイルとしてリードして、XML デシリアライズします
先ず、コレが解りませんでした!

最初に UiPath の開発元が配布している XML のパッケージを追加しないとイケないそうです

「依存関係」-「パッケージを管理」で開くダイアログから、「オフィシャル」を選択して、検索文字に Web を指定して検索します
「UiPath.Web.Activities 作者 UiPath」と言うパッケージを選択してインストールします

コレが第一関門でした

パッケージの説明文にもあるように、このパッケージを追加すると、JSON を扱える アクティビティがいっしょに追加されます

XML を読み込む

XML をテキストファイルとして読み込みます
ホントは、ウェブ上の XML を直接読み込みたかったんですが、必要な処置が難しそうなので 指定したページをローカルにダウンロードするロボを別途雇っておきました

で、最初に Read Text File で、指定の XML を読み込みます
ここでは、Google のニュースを RSS として読み込んで、そのままダウンロードして、テキストファイルとしてディスクに保存してあります

出力コンテンツは String 型です

XML をデシリアライズ

読んだ文字列を Deserialize Xml で XDocument 形式のxml という変数に格納します
「出力」-「XML ドキュメント」の欄で CTRL-K 等を使って処理すれば自動的にデータ形式が指定されます

ノードバリューの取り込み方

変数 xml に次の様に指定すると、最初のノードを読み込むことが出来ます
RSS ですので、ルートノードが rss で、channels -> item という子ノードがある構成です

MessageBox で、「入力」-「テキスト」に
xml.Element("rss").Element("channel").Element("item").Element("title").Value.ToString
と指定します
Element() で、必要な階層までノードを掘ってゆく感じでしょうか?
これも、全くの初心者故、想像していない方法でしたので、忘れないようにしないとね!

一番おしりですけど、.Value.ToString にしてありますが、
.Value か .ToString のどちらかだけでメッセージとして表示できます

例えば、…Element(“item).ToString と書いておくと、item ノードの構成要素をすべてテキスト化してメッセージボックスに表示します

ノードリストのループ処理

RSS の item ノードへのパスの繋げ方が解りましたので、ノードリストをループ処理します
で、ここで重要なのが、処理するコレクションのデータ形式?です

これがさっぱり解りませんでした
For Each でループさせるコレクション値は
xml.Element("rss").Element("channel").Elements("item")
です
「その他」の「 TypeArgument 」 には System.Xml.Linq.XElement を指定します

コミュニティー エディション ユーザーですので、こう言う情報が手許に有りませんので、
YouTube のチュートリアル動画を見まくりました(眠かった…)

見付けたときは、久し振りに脳内物質で満たされました ^^

TypeArgument でドロップダウンして、「型の参照」で、System.Xml.Linq.XElement と入力して検索してください
一度指定すると、次からドロップダウンに表示されます

これで、item ノードのリストがループ処理出来ます

item と言う要素に格納されますので、メッセージボックスで
item.Element("title").Value
をしていして表示できるか確認します

あとは、この For Each の Body に必要な処理を追加すれば大丈夫です ^^/

参考にした動画:

いや~…
片手間で調べていましたので、数日かかってしまいました…

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.