ちょっと、面倒なので 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 に必要な処理を追加すれば大丈夫です ^^/
参考にした動画:
いや~…
片手間で調べていましたので、数日かかってしまいました…