デジタル推進課

KNIME・Excel Macro・Power Automateなど日々の業務で使用できる自動化ツールを中心に書き綴ります

KNIME - XMLを簡単に分解するには? ~XPath・サイトマップ~

f:id:makkynm:20210426002312p:plain


 

 

はじめに

こんにちは、まっきーです。今回は「XML構造を簡単に分解するNode」を解説したいと思います。簡単なXMLファイルの例として、本ブログのサイトマップを使用したいと思います。

XMLサイトマップhttps://degitalization.hatenablog.jp/sitemap.xml

 

 今回のテーマ ~XPath~

前回開設したGET RequestのNodeと一緒に使うことが多いです。

f:id:makkynm:20210425230924p:plain

 今回のテーマ ~XPath~

 

degitalization.hatenablog.jp

 

覚えてほしいこと

XMLを簡単に分解したい時はXPath

 

やりたいこと - XPath

XMLを分解してサイトマップを読み込む」

今回は本ブログのサイトマップhttps://degitalization.hatenablog.jp/sitemap.xml」のXMLをKNIMEで分解してみたいと思います。

f:id:makkynm:20210425231328p:plain

やりたいこと - サイトマップを読み取る

 

はてなブログには、必ずサイトマップというwebページの目次のようなものがついています。好きなブログのURLに「/sitemap.xml」という末尾をつけてみてください。サイトマップXMLの形式で見れると思います。

 

XMLとは?

先ほどから出てきているXMLとは、JSONと同じようなもので、下記のようなタグで囲まれた構造をした文章・データです。

こんな構造のデータなんだなーくらいの意識で問題ないです。

 

今回のサイトマップを実際に見てみると、なんとなく分かると思います。

タグとは<sitemap>, <loc>, <lastmod>の部分を言います。データがタグで囲われてますよね。

f:id:makkynm:20210425231956p:plain

XMLとは?

 

事前準備 - GET RequestでサイトマップXMLで取得

事前準備として、GET RequestXML形式のデータをKNIMEに取り込みましょう。Configureだけ載せます。

f:id:makkynm:20210425232433p:plain

事前準備 - GET Request

 

XPathの使い方

このNodeはXML構造のデータを簡単に分解するNodeです。GET RequestでXML形式のデータを読み込んだ後によく出てきます。

Workflow - XPath

f:id:makkynm:20210425232616p:plain

Workflow - XPath

Confirm - XPath

XPathを実行後、XML構造で1行しかなかったデータが、繰り返し構造を利用して複数行に分けられていることがわかると思います。

f:id:makkynm:20210425231328p:plain

Confirm - XPath

Configure - Xpath

色々設定があるように見えますが、XPath summaryの部分のみ重要です。

f:id:makkynm:20210425233346p:plain

Configure - Xpath

 

Step1 - XML Column - 対象のXMLコラムを指定

まずはXMLのコラムを指定します。

また、残っていると結果が見づらくなるので、Remove source columnにはチェックを入れておくことをオススメします。

 

Step2 - XPath Summary - 抽出ルール指定

XML構造は規則性があるので、そのタグの階層を指定してあげることによって同じ階層の同じタグのデータを抜き出してくるというのがこのNodeでできることです。

そういうと、難しく聞こえるかもしれませんが、難しい部分はKNIMEがやってくれるので、安心してください。

 

XPath Summaryの部分では現在定義している抽出ルールを一覧でみることができます。

XPath Summaryのルール一覧は下記の3つのボタンで編集できます。

  • Add XPathXML-Cell Previewを使用して抽出ルールを追加
  • Edit XPath:定義済みのルールを編集
  • Remove XPath:定義済みのルールを削除

 

抽出ルールの定義の仕方 - Add XPath と XML-Cell Preview

ここが1番重要です。下記の3ステップで抽出ルールを指定できます。

  1. XML-Cell Preview上で抽出したいデータの部分をクリックする
  2.  Add XPathをクリック
  3. 抽出方法の詳細を指定

まずは1、2の部分です。XML-Cell Preview上で抽出したいデータの部分をクリックします。すると、KNIME側が階層を勝手に認識してくれます。(Selected XPathの部分)

あとは、「Add XPath」を押せばOKです。

 

f:id:makkynm:20210425234854p:plain

XML-Cell Preview上で抽出したいデータの部分をクリック、Add XPathをクリック

 

Add XPathをクリックすると、下図のポップアップが出てきます。ここで抽出方法の詳細を定義します。

f:id:makkynm:20210425235147p:plain

抽出方法の詳細を指定

とはいえ、ほとんど設定はデフォルトで問題なく、唯一最後のMultiple tag optionsだけ指定してあげましょう。

  • Column Name:抽出後のコラム名を指定。データに応じてコラム名を変えるかを指定できます。
  • Retrun Type:抽出後のデータ型を指定できます。まずはStringで取り込み、後から変換でいいともいます。
  • Multiple tag options:データのOutputをどのように出力するかを選択します。これが重要です。

 

今回は、複数行でデータを取得したいので、Multiple tag optionsにMultiple Rowsを指定すればOKです。

 

 ちょっと一言

Multiple tag optionsの種類について

どのようなOutputの形式で出てくるのか、いまいち分からないと思うのでここで実際のOutputを見て理解していきましょう。

  • Single Cell - 指定されたXPathの値のみを単体のCellで返す。(規則性で複数返すことはしない)

f:id:makkynm:20210426000154p:plain

Single Cell
  • Collection Cell - Collection型でデータを格納する 

 

f:id:makkynm:20210426000403p:plain

Collection Cell 

Collection型は以前UngroupのNodeの時に扱いましたね。

degitalization.hatenablog.jp

 

  • Multiple Columns - 複数コラムとして出力

f:id:makkynm:20210426000333p:plain

Multiple Columns
  • Multiple Rows - 複数行として出力

f:id:makkynm:20210426000632p:plain

Multiple Rows

 

おわりに

お疲れ様でした!XPathは1回やってみたら簡単にコツを掴めるNodeだと思います。ぜひ一度試してみてください。

また、今回分解して取得したXMLのURLをもう一度GET Requestをしてみるとどうなるか、ぜひ試してみてください。

https://degitalization.hatenablog.jp/sitemap_periodical.xml?year=2021&month=1

これを使えば、ブログの情報一覧が自動で取得できるようになりますよ!ではまた! 

 

 

  

余談 

もうすぐゴールデンウィークですね!予定は決まっていますか?

昨年はブログばかり書いていましたが、今回は少しお休みして、ソロキャンでもしようと思っています。道具を集めて出費が大変なことになっていますが。自然を見てボーッとしたいですね。適度に息抜きしてコロナともうまく付き合いたいものです。

ではまた!

 

KNIMEに関する本

KNIMEに関する日本語の本って今これくらいしかないと思うんですよね、、

本がいいなーと言う人はぜひ試してみてください。

 

参考リンク