Documentation/Calc 関数/FILTERXML
TDF LibreOffice Document Liberation Project Community Blogs Weblate Nextcloud Redmine Ask LibreOffice Donate
Function name:
FILTERXML
Category:
Text
Summary:
XML形式でエンコードされた構造化データを含む文字列にXPath式を適用し、XMLマークアップ内から目的のデータを簡単に抽出できるようにします。
拡張マークアップ言語(XML)は、広く使用されているマークアップ言語であり、人間とコンピュータの両方が読み取ることができる構文を使用して、データの保存と転送をサポートできます。インターネットやその他の多くの環境でのさまざまなデータの交換をサポートします。
XML パス言語 (XPath) は、パス式(非XML構文)を使用してXMLドキュメントの一部を選択するクエリ言語です。
配列数式で FILTERXML 関数を使用すと機能は更に強化されます。(Enterキーだけを押すのではなく) Shift+Control+ Enter の組み合わせを使用するか、関数ウィザードを使用するときに「配列」チェックボックスをオンにすることで、その機能を利用できます。FILTERXML のこの動作は、Calcの配列カテゴリの関数の動作と似ています。
Syntax:
FILTERXML(XML ドキュメント; XPath 式)
Returns:
目的の抽出データを含むテキスト文字列(配列数式で使用されている場合は複数のテキスト文字列)を返します。
Arguments:
XML ドキュメントは、フィルタされる XML マークアップを含む、引用符で囲まれたテキスト文字列、またはテキスト文字列を含むセルへの参照です。XML ドキュメントという用語は、Calc の関数ウィザードに表示されるため使用されており、個別のドキュメントファイルを指すものではありません。XMLドキュメント全体が文字列引数または参照されるセルに含まれます。
XPath 式は、使用する XPath 式を含むテキスト文字列 (引用符で囲む)、またはテキスト文字列を含むセルへの参照です。
- XML ドキュメントまたは XPath式が空の文字列の場合、FILTERXML 関数は #VALUE! エラーを返します。
- XML ドキュメントに有効な XML が含まれていない場合、FILTERXML 関数は #VALUE! エラーを返します。
- XPath式に有効な XPathシーケンスが含まれていない場合、FILTERXML 関数は #VALUE! エラーを返します。
- XML ドキュメント と XPath式 の両方が有効であっても、一致する要素が見つからない場合、FILTERXML 関数は該当する値がないという (#N/A) を返します。
Additional details:
FILTERXML 関数を効果的に使用するには、XML と XPath に関する詳細な情報が必要になる場合があります。この関数は、これらの技術に関する深い知識がなくても使用できますが、これらの分野に関する知識を向上させることで、FILTERXML 関数を最大限に活用できるようになります。
次のリンクから始めることをお勧めします:
- Wikipediaの XML ページ
- World Wide Web Consortium's (W3C) XML のページ
- Wikipediaの XPath ページ
- World Wide Web Consortium's (W3C) XPath のページ
また、XML と XPath に関する便利なチュートリアルを無料で提供しているサイトもいくつかあります。
Examples:
基本操作例
次の XML マークアップには、架空のクラブの 3人のメンバーの架空の名前と電子メールアドレスが含まれています。
- <members>
- <member>
- <name>John Doe</name>
- <email>sbriacc2@nasigoreng.buzz</email>
- </member>
- <member>
- <name>Jane Doe</name>
- <email>7jobelso.57c@bacharg.com</email>
- </member>
- <member>
- <name>Ann Other</name>
- <email>2kingmuslehh@elhida.com</email>
- </member>
- <member>
- </members>
上記の XML は理解しやすいように、レイアウトされています。このコード全体をコピーし、空のCalcワークシートのセル A1 にテキストとして貼り付けます。この操作過程で、コードの書式設定の一部が失われ、XML タグ間に空白が残るかもしれませんが、FILTERXML 関数の動作に影響はありません。
同じシートの空のセルに数式 =FILTERXML($A$1; "/members/member/name")
を入力します。FILTERXMLでは、メンバーリストの最初のメンバーの名前である文字列"John Doe"を返します。この XPath 文字列の先頭の "/" は、XML ドキュメントのルートから始まる絶対パスであることを示します。
同じシートの空のセルに数式 =FILTERXML($A$1; "//member[2]/name")
を入力します。FILTERXML では、メンバーリストの2番目のメンバーの名前である文字列「Jane Doe」を返します。この Xpath 文字列の先頭の "//" は相対パスを示すため、必要なノードは XML ドキュメント内の任意の場所に配置できます。
前の例の XPath 文字列内のサブ文字列 "[2]" は、述語の例です。XPath では、述語を使用して、特定のノードまたは特定の値を含むノードを検索できます。以下に、更にいくつかの例を示します。
同じシートの空のセルに数式 =FILTERXML($A$1; "/members/member[last()-1]/email")
を入力します。FILTERXML 関数は、メンバーリストの2番目のメンバーの電子メールアドレスである文字列「7jobelso.57c@bacharg.com」を返します。サブ文字列 "[last()-1]" は、members要素の子である最後から2番目のmember要素を選択する述語です。
最後に、数式 =FILTERXML($A$1; "//member[position()>2]")
を同じシートの空のセルに入力します。FILTERXML 関数では、リスト内の3番目のメンバーに関する利用可能なすべての情報(名前と電子メールアドレス)を示す文字列 "Ann Other 2kingmuslehh@elhida.com" を返します。文字列 "[position()>2]" は、最初と2番目のメンバー要素には一致しませんが、3番目以降のメンバー要素に一致する述語です。
配列の例
セル A1 には、上記の 基本操作例 サブセクションと同じ XML マークアップが含まれている必要があります。
隣接し、同じ列にある 3つの空のセルを選択します。この例では、セル A3、A4、および A5 について説明します。
入力ラインに移動し、数式 =FILTERXML($A$1, "//name")
を入力します。ただし、式の入力が完了したときに単に Enter を押すのではなく、Shift+Control+Enterを押します。これにより配列数式が入力され、FILTERXML 関数によりセル A3 に最初のメンバーの名前、セル A4 に 2 番目のメンバーの名前、セル A5 に 3 番目のメンバーの名前が入力されます。
この XML コードには 3つのメンバーに関する情報しか含まれていないため、最初に誤って 4つのセル (A3:A6) を選択した場合、セル A6 には該当する値がない時のエラー (#N/A) が表示されます。
WEBSERVICE 関数を介したインターネット ソースからのXMLデータの使用
The Documentation Foundation の wiki には、LibreOffice 情報のプレスリリース が掲載されている領域があります。このブログは RSS(Really Simple Syndication)フィードがが関連付けられており、RSS は XML を使用して構造化されたプレーンテキストのみであるため、FILTERXML 関数の使用方法を示すために利用できます。CalcのWEBSERVICE 関数を使用してこのフィードにアクセスでき、2つの関数を組み合わせることで、データを取得する機能が大幅に強化されます。
この例を記述している時点では、数式 =FILTERXML(WEBSERVICE("https://blog.documentfoundation.org/blog/category/press-releases/feed/"); "//channel/title")
は文字列 "Press Releases – The Document Foundation Blog" を返します(ただし、この文字列の内容は将来変更される可能性があります)。
空のセル(セル D1 など)にURL "https://blog.documentfoundation.org/blog/category/press-releases/feed/" を保存します。別の空のセルに数式=FILTERXML(WEBSERVICE($D$1); "//channel/item[1]/pubDate")
を入力すると、最新のプレスリリースの発行日を示す文字列 (たとえば、"Thu, 13 May 2021 12:00:27 +0000")が返されます。
同様の方法で、The Document Foundation の wiki に対する最近の変更情報にアクセスすることもできます。たとえば、数式 =FILTERXML(WEBSERVICE("https://wiki.documentfoundation.org/api.php?hidebots=1&days=7&limit=50&action=feedrecentchanges&feedformat=rss"); "//lastBuildDate")
は、wikiの最終作成日を示す文字列を返します(たとえば、"Sat, 05 Jun 2021 10:01:26 GMT")。
指定されたURLのデータを取得またはフェッチできない場合、WEBSERVICE 関数は #VALUE! エラーを返します。ISERROR 関数を使用して、 WEBSERVICE 関数からの戻り値を FILTERXML 関数に渡す前にエラーをチェックすることを検討してください。
Related LibreOffice functions:
ODF standard:
なし。
Related (or similar) Excel functions:
FILTERXML v.2013 以降