XML パッケージでのアクションの使用例
- 最終更新日2023/05/22
XML パッケージでのアクションの使用例
XML パッケージを使用して、XML ファイルから Excel シートにデータを読み込み/書き込みする Bot を作成します。
このチュートリアルで使用する XML のサンプルの構造は次のとおりです。
<movies>
<movie genre="" year="">
<name></name>
<description></description>
<director></director>
<writers>
<writer type=""></writer>
<writer type=""></writer>
</writers>
<rating>R</rating>
</movie>
</movies>
開始する前に、XML のサンプル ファイルをダウンロードしてください。
このチュートリアルは、次のアクションの実行することを意図しています。
- XPath 式を使用して、特定の値を持つノード セットを取得し、ノード セット内の項目 (このチュートリアルで特定の評価を持つムービーなど) を反復処理します。
- XPath 関数を使用して、子ノード セットを反復処理します。
- 変数を連結して文字列を作成します。
- Excel シートにデータを書き込みます。
前提条件
以下を確認してください。
- Bot の作成方法を理解している。
- Control Room のユーザー インターフェースに精通している。
手順
-
Bot を作成して、XMLDataReader という名前を付けます。
-
ステップを追加して、Excel シートを開くためのすべてのタスクをグループ化します。
-
Bot エディターでフローを開始してから、[ステップ] > [ステップ] アクションを追加します。
注: アクションを追加するには、[アクション] ペインでアクションを検索し、Bot エディターの Bot フローにドラッグします。
- [タイトル] で、Open an Excel Sheet を入力し、アクションを保存します。
-
Bot エディターでフローを開始してから、[ステップ] > [ステップ] アクションを追加します。
-
Excel シートを作成して開くには、[Excel の高度な操作] > [ブックを作成] を使用します。
- [ステップ] アクション内に [Excel の高度な操作] > [ブックを作成] アクションを追加します。
- [ファイルパス] に、C:\movies\movies.xlsx と入力し、アクションを保存します。指定したパスに movies フォルダーが存在しない場合、パスに [movies] フォルダーを作成します。
-
Excel シートの最初のセルを選択するには、[Excel の高度な操作] > [セルに移動] アクション を使用します。
- [Excel の高度な操作] > [セルに移動] アクションを [Excel の高度な操作: ブックを作成] アクションの後に追加します。
- [セルの指定] をクリックして (まだ選択されていない場合)、A1 と入力します。
- アクションを保存します。
-
別のステップを作成して、XML データを取得するすべてのタスクをグループ化します。
- 最初の [ステップ] アクションの後に、[ステップ] > [ステップ] アクションを追加します。
- [タイトル] で、Get XML Data を入力し、アクションを保存します。
-
XML セッションを開始します。
- [XML データの取得] ステップ内に、[XML] > [セッションを開始] アクションを追加します。
- [ファイル] で、[デスクトップ] を選択し、ダウンロードしたサンプル XML ファイルを参照して選択します。
- 変更を保存します。
-
R 評価のすべてのムービー ノードを取得するには、[複数ノードを取得] アクションを使用します。
- [セッションを開始] の後に、[XML] > [複数ノードを取得] アクションを追加します。
-
[XPath 式] で、//movie[rating/text()='R'] と入力し、アクションを保存します。
選択したノード セットはシステム変数に格納され、[XML Dataset の各ノードに対して] 反復子を使用できるようになりました。
- アクションがテキスト ノードだけでなくノード セット全体を取得するようにするには、[XPath 式] をクリックします。
-
[ループ] アクションを使用して、[複数のノードを取得] アクションを取得するために選択したノード セットを反復処理します。
- [ループ] > [ループ] を [XML: 複数ノードを取得] アクションの後に追加します。
- [反復子] で、反復子として、[XML] > [XML Dataset の各ノードに対して] を選択します。
- [この変数に現在の行を代入] で、[(x)] をクリックし、デフォルト名 (XMLNode など) を持つ変数を作成します。これで、ノード セット内の各項目が変数から使用できるようになります。
- アクション を保存します。
-
反復ノードからムービー名を取得するには、[1 つのノードを取得] アクションを使用します。
- [XML] > [1 つのノードを取得] アクションを [ループ: ループ] アクション内に追加します。
- [XPath 式] に、$XMLNode$/name と入力します。
- [出力を変数に代入] で、変数を作成し、sMovieName という名前を付けます。
- アクション を保存します。
-
XMLNode 変数からムービー名を書き込むには、[セルを設定] アクションを使用します。
- [1 つのノードを取得] アクションの後に、[Excel の高度な操作] > [セルを設定] アクションを追加します。
- [アクティブなセル] をクリックし、[セルの値] に $sMovieName$ と入力して、アクションを保存します。
-
Excel シート内の新しいセルを選択するには、[セルに移動] アクションを使用します。
- [セルに移動] アクションを [セルを設定] アクションの後にある [Excel の高度な操作: セルを設定] アクションの後に追加します。
- [アクティブなセル] をクリックし、[1 つ右のセル] を選択してアクションを保存します。
-
反復ノードからディレクトリ名を取得するには、[1 つのノードを取得] アクションを使用します。
- [XML] > [1 つのノードを取得] アクション を [Excel の高度な操作: セルに移動] アクションの後に追加します。
- [XPath 式] に、$XMLNode$/director と入力します。
- [出力を変数に代入] で、sDirector という名前の変数を作成します
- アクション を保存します。
-
XMLNode 変数からディレクター名を書き込むには、[セルを設定] アクションを使用します。
- [Excel の高度な操作] > [セルを設定] アクションを [XML: 1 つのノードを取得] アクションの後に追加します。
- [アクティブなセル] をクリックし、[セルの値] に $sDirector$ と入力して、アクションを保存します。
-
Excel シート内の新しいセルを選択するには、[セルに移動] アクションを使用します。
- [セルに移動] アクションを [Excel の高度な操作: セルを設定] アクションの後に追加します。
- [アクティブなセル] をクリックし、[1 つ右のセル] を選択してアクションを保存します。
-
なぜなら
<writers>
ノードには複数の<writer>
ノードを含めることができるため、各ライター名を取得し、名前を結合します。これらの名前は、複数のセルに値を書き込む代わりに、1 つのセルに書き込むことができます。これを実行するには、現在の [ループ] アクション内に、[ループ] アクションを追加します。-
を取得すること。
<writer>
ノードの番号を<writers>
ノード内で取得するには、[XML] > [XPath 機能を実行] を [Excel の高度な操作: セルを設定] アクションの後に追加します。[XPath 式] に、count($XMLNode$/writers/writer) と入力します。[出力を変数に代入] で、sWriterCount という名前の変数を作成します。を使用することになります。<writer>
ノード カウントを使用して、すべての<writer>
ノードをループさせます。 -
[ループ] > [ループ] アクションを [XML: XPath 機能を実行] アクションの後に追加します。
重要: 2 番目の [ループ] アクションはメイン [ループ] アクション内に追加する必要があります。
- [反復子] で、反復子として、[n 回] を選択します。
-
[回数] に、$sWriterCount.String:toNumber$ と入力します。
注: sWriterCount には、文字列値が含まれます。文字列を数値に変換するには、lt;variable name>.String:toNumber$ フォーマットを使用します (例: $sWriterCount.String:toNumber$)。
- [現在の値を変数に代入 (オプション)] で、Counter という名前の変数を作成します。
- アクション を保存します。
-
を取得すること。
-
すべての「writer」ノードの値を連結するには、文字列変数を作成します。
-
[変数] ペインで、プラス アイコンをクリックします。
[変数を作成] ウィンドウが開きます。
- [タイプ] で、[文字列] を選択します。
- [名前] に、sWriters と入力します。
- [作成] をクリックします。
-
[変数] ペインで、プラス アイコンをクリックします。
-
反復処理
<writer>
ノードから値を取得するには、[1 つのノードを取得] アクション を使用します。- 2 番目の [ループ] アクション 内に [XML] > [1 つのノードを取得] アクションを追加します。
-
[XPath 式] に、$XMLNode$/writers/writer[$Counter.Number:toString$] と入力します。
Counter 変数を使用すると、特定のインデックスのノードにアクセスできます。Counter 変数には数値が含まれているため、.Number:toString$ 式が Counter 変数に追加され、文字列に変換されることに注意してください。
- [出力を変数に代入] で、変数を作成し、sWriter という名前を付けます。
- アクション を保存します。
-
「writer」ノードから値を割り当てるには、[文字列] > [代入] アクション を使用します。
- [文字列] > [代入] アクション を 2 番目のループ内の [XML: 1 つのノードを取得] の後に追加します。
- [元の文字列変数/値を選択 (オプション)] に、$sWriters$, $sWriter$ と入力します。
- [ターゲットの文字列変数を選択] で、sWriters を選択します。
- アクション を保存します。
内部ループが完了すると、sWriters 変数にはすべてのライター名が含まれます。 -
ライター名を新しいセルに書き込むには、メイン ループ内の [Excel の高度な操作] > [セルを設定] アクションを使用します。
- 最初の [Loop] アクション内の内部 [ループ] アクションの後に、[Excel の高度な操作] > [セルを設定] アクションを追加します。
- [アクティブなセル] をクリックします。
- [セル値] に、$sWriters$ と入力します。
- アクション を保存します。
1 つの<movie>
ノードから取得されたデータは、行に書き込まれます。次の<movie>
ノードからデータを書き込むには、Excel シートで次の行を選択する必要があります。 -
次の行にカーソルを移動するには、[Excel の高度な操作] > [セルに移動] アクション を使用します。
- [セルに移動] アクションを [セルを設定] アクションの後に追加します。
- [アクティブなセル] をクリックして、[行の先頭] を選択し、アクションを保存します。
- [セルに移動] アクションを再度追加します。[アクティブなセル] をクリックして、[1 つ下のセル] を選択し、アクションを保存します。
-
取得した
<movie>
ノード セットの次のノードが反復処理される前に、sWriters 変数をリセットする必要があります。sWriters 変数をリセットするには、次の手順を実行します。- [文字列] > [代入] アクションをメイン ループ内の [Excel の高度な操作: セルに移動] の後に追加します。
- [元の文字列変数/値を選択 (オプション)] を空白のままにします。
- [ターゲットの文字列変数を選択] で、sWriters を選択します。
-
アクション を保存します。
-
新規ステップを作成します。
- 2 番目の [ステップ] アクションの後に、[ステップ] > [ステップ] アクションを追加しますアクション。
- [タイトル] に、Close the file と入力します。
-
Excel シートを閉じるには、[Excel の高度な操作][閉じる] アクションを使用します。
- [ファイルを閉じる] ステップ内に [Excel の高度な操作] > [閉じる] を追加します。
- 変更を保存します。
-
Bot を実行します。