XPath の概要
XSLT では、 XML パス言語 (XPath)標準を使用して、入力ドキュメントの XML 階層内の要素を指定して位置を指定します。XPath のパワフルな表現構文では、XML 入力ドキュメントの一部を選択するための複雑な基準を定義できます。
ノードと軸
XPath は、ドキュメント階層のすべての部分をノードとして表示 します。コミットスクリプト、opスクリプト、イベントスクリプト、SNMPスクリプトでは、ノードの重要なタイプは 要素ノード、 テキストノード、 および属性ノードです。次の XML タグを検討してください。
<system> <host-name>my-router</host-name> <accounting inactive="inactive"> </system>
これらの XML タグエレメントは、以下のタイプの XPath ノードの例を示しています。
<host-name>my-router</host-name>
要素ノードmy-router
テキストノードinactive="inactive"
-属性ノード
ノードは、特定の 軸に配置されていると見なされます。 先祖の軸 は、ノードから上の一連の親ノードを指し示します。 子軸 は、要素ノードの直接子ノードのリストをポイントします。 属性軸 は、要素ノードの属性セットのリストをポイントします。 以下の兄弟軸 は、ノードの後ろにあるが、同じ親の下にあるノードを通って指します。 子孫軸 には、ノードのすべての子孫が含まれています。ここには表示されない他にも多くの軸があります。
各XPath式は、コンテキストノード(または単にコンテキスト)と呼ばれる特定のノードから評価されます。コンテキスト ノードは、XSLT プロセッサが現在探しているノードです。XSLT では、ドキュメントの階層が通過するとコンテキストが変更され、XPath 式がその特定のコンテキスト ノードから評価されます。
Junos OS コミット スクリプトでは、コンテキスト ノードの概念は Junos OS 階層レベルに対応します。たとえば、XPath 式は /configuration/system/domain-name
、コンテキスト ノードを 階層レベルに [edit system domain-name]
設定します。
すべてのコミット スクリプトにこのテンプレートを<xsl:template match="configuration">
含むことをお勧めします。この要素を使用すると、スクリプト内のプログラミング手順(または <xsl:if>
など<xsl:for-each>
)のすべての XPath 式からルート要素を除外/configuration/
できるため、Junos 階層レベルで XPath 式を開始できます(例えば)。 system/domain-name
詳細については、「コミット スクリプトに必要な定型プレート」を参照してください。
パスと述語の構文
XPath 式には、パス構文と述部構文の 2 種類の構文が含まれています。パス構文では、現在のコンテキスト ノードからドキュメントの階層にある軸の 1 つ上のパス位置を検査するノードを指定します。パス構文の例をいくつか紹介します。
accounting-options
現在のコンテキストの子である という名前accounting-options
の要素ノードを選択します。server/name
— 現在のコンテキストの子という名前name
の要素の子である という名前server
の要素ノードを選択します。/configuration/system/domain-name
ドキュメント(configuration
)のルート要素の子である というdomain-name
名前の要素の子である という名前system
の要素ノードを選択します。parent::system/host-name
— 現在のコンテキスト ノードの親である という名前host-name
の要素の子という名前system
の要素ノードを選択します。軸はparent::
、2 つの期間()..
と省略できます。
述部構文を使用すると、パス構文で選択された各ノードでテストを実行できます。結果セットには、テストに合格したノードのみが含まれます。述語は、パスノードの後に角括弧([ ]
)の中に表示されます。述部構文の例を以下に示します。
server[name = '10.1.1.1']
現在のserver
コンテキストの子であり、値が 10.1.1.1 という名前の子要素を持つという名前name
の要素を選択します。*[@inactive]
現在のコンテキストの子で、 という名前inactive
の属性(*
軸からノードを選択)があるノード(@
任意のノードに一致)をattribute
選択します。route[starts-with(next-hop, '10.10.')]
現在のコンテキストの子であり、値が文字列 10.10 で始まる という名前の子要素を持つという名前route
next-hop
の要素を選択します。この
starts-with
関数は、XPath に組み込まれている多くの関数の 1 つです。XPath は、関係テスト、等価テスト、およびここに記載されていないその他の多くの機能もサポートしています。
XPath 演算子
XPath は、および(または)などのAND
標準的な論理演算子、、 などの<
!=
>
=
比較演算子、 などの数値演算子+
*
-
をサポートします。|
XSLT では、XSLT スクリプトは XML ドキュメントであるため、()演算子は次のように、小さい演算子<
は<=
<=
次のように表<
し、少ない演算子は XML で表現される必要があります。
XPath の機能と演算子の詳細については、包括的な XPath リファレンス ガイドを参照してください。XPathは、 http://w3c.org/TR/xpath のW3C仕様で完全に記述されています。