XPath-クイックガイド
XPathを学ぶ前に、まずXSLを理解する必要があります。 Extensible Stylesheet L言語。CSSがHTMLに似ているので、XMLに似ています。
XSLの必要性
HTMLドキュメントの場合、テーブル、div、スパンなどのタグが事前定義されています。ブラウザは、タグにスタイルを追加し、CSSスタイルを使用して表示する方法を知っています。ただし、XMLドキュメントの場合、タグは事前定義されていません。XMLドキュメントを理解してスタイルを設定するために、World Wide Web Consortium (W3C)XMLベースのスタイルシート言語として機能できるXSLを開発しました。XSLドキュメントは、ブラウザがXMLドキュメントをレンダリングする方法を指定します。
以下はXSLの主要部分です-
XSLT −XMLドキュメントを他のさまざまなタイプのドキュメントに変換するために使用されます。
XPath −XMLドキュメントをナビゲートするために使用されます。
XSL-FO −XMLドキュメントのフォーマットに使用されます。
XPathとは何ですか?
XPathは、World Wide Web Consortium(W3C)の公式推奨事項です。XMLファイル内の情報を検索するための言語を定義します。XMLドキュメントの要素と属性をトラバースするために使用されます。XPathは、XMLドキュメントから関連情報を照会するために使用できるさまざまなタイプの式を提供します。
Structure Definitions − XPathは、要素、属性、テキスト、名前空間、処理命令、コメント、ドキュメントノードなどのXMLドキュメントの部分を定義します。
Path Expressions − XPathは、XMLドキュメント内のノードまたはノードのリストを選択する強力なパス式を提供します。
Standard Functions − XPathは、文字列値、数値、日付と時刻の比較、ノードとQNameの操作、シーケンス操作、ブール値などを操作するための標準関数の豊富なライブラリを提供します。
Major part of XSLT − XPathはXSLT標準の主要な要素の1つであり、XSLTドキュメントを操作するには知識が必要です。
W3C recommendation − XPathは、World Wide Web Consortium(W3C)の公式推奨事項です。
XPathを使用するときは、次の点に注意する必要があります。
- XPathは、XSLT標準のコアコンポーネントです。
- XSLTはXPathなしでは機能しません。
- XPathは、XQueryとXPointerの基盤です。
XPath式は通常、ノードのセットを選択するためにパターンを定義します。これらのパターンは、XSLTが変換を実行するために、またはXPointerがアドレス指定の目的で使用します。
XPath仕様では、XPath式の実行の出力となる7種類のノードを指定しています。
- Root
- Element
- Text
- Attribute
- Comment
- 処理命令
- Namespace
XPathは、パス式を使用して、XMLドキュメントからノードまたはノードのリストを選択します。
以下は、XMLドキュメントから任意のノード/ノードのリストを選択するための便利なパスと式のリストです。
S.No. | 表現と説明 |
---|---|
1 | node-name 指定された名前「nodename」を持つすべてのノードを選択します |
2 | / 選択はルートノードから始まります |
3 | // 選択は、選択に一致する現在のノードから開始されます |
4 | . 現在のノードを選択します |
5 | .. 現在のノードの親を選択します |
6 | @ 属性を選択します |
7 | student 例-「student」という名前のすべてのノードを選択します |
8 | class/student 例-クラスの子であるすべての学生要素を選択します |
9 | //student ドキュメント内のどこにいても、すべての学生要素を選択します |
例
この例では、サンプルXMLドキュメントstudents.xmlとそのスタイルシートドキュメントを作成しました students.xsl 以下のXPath式を使用します select 各学生ノードのロール番号、名、姓、ニックネーム、およびマークの値を取得するためのさまざまなXSLタグの属性。
student.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
student.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "class/student">
<tr>
<td> <xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
出力を確認します
この章では、一般的なタイプのノード、XPath定義、およびハンドルをカバーするXPath式について詳しく説明します。
S.No. | ノードの種類と説明 |
---|---|
1 | ルート XMLドキュメントのルート要素ノード。 |
2 | 素子 要素ノード。 |
3 | テキスト 要素ノードのテキスト。 |
4 | 属性 要素ノードの属性。 |
5 | コメント コメント |
ロケーションパスは、XMLドキュメント内のノードのロケーションを指定します。このパスは、絶対パスでも相対パスでもかまいません。ロケーションパスがルートノードまたは「/」で始まる場合、それは絶対パスです。以下は、絶対パスを使用して要素を見つける例のいくつかです。
/class/student −クラスルートノード内の学生ノードを選択します。
<xsl:for-each select = "/class/student">
/class/student/firstname −クラスルートノード内の学生ノードの名を選択します。
<p><xsl:value-of select = "/class/student/firstname"/></p>
例
この例では、サンプルXMLドキュメントを作成しました students.xml およびそのスタイルシートドキュメント students.xsl XPath式を使用します。
以下は、使用されるサンプルXMLです。
student.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
student.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/" >
<html>
<body>
<h3>Details of each Students. </h3>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<tr>
<td><xsl:value-of select = "/class/student[1]/@rollno"/></td>
<td><xsl:value-of select = "/class/student[1]/firstname"/></td>
<td><xsl:value-of select = "/class/student[1]/lastname"/></td>
<td><xsl:value-of select = "/class/student[1]/nickname"/></td>
<td><xsl:value-of select = "/class/student[1]/marks"/></td>
</tr>
<tr>
<td>
<xsl:value-of select = "/class/student/@rollno"/>
</td>
<td><xsl:value-of select = "/class/student[2]/firstname"/></td>
<td><xsl:value-of select = "/class/student[2]/lastname"/></td>
<td><xsl:value-of select = "/class/student[2]/nickname"/></td>
<td><xsl:value-of select = "/class/student[2]/marks"/></td>
</tr>
<tr>
<td>
<xsl:value-of select = "/class/student[3]/@rollno"/>
</td>
<td><xsl:value-of select = "/class/student[3]/firstname"/></td>
<td><xsl:value-of select = "/class/student[3]/lastname"/></td>
<td><xsl:value-of select = "/class/student[3]/nickname"/></td>
<td><xsl:value-of select = "/class/student[3]/marks"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
出力を確認します
ロケーションパスは、XMLドキュメント内のノードのロケーションを指定します。このパスは、絶対パスでも相対パスでもかまいません。ロケーションパスが選択したノードで始まる場合、それは相対パスです。
以下は、相対パスを使用して要素を見つけるいくつかの例です。
firstname −学生ノードに関連する名を選択します。
<p><xsl:value-of select = "firstname"/></p>
例
この例では、サンプルXMLドキュメントを作成しました students.xml およびそのスタイルシートドキュメント students.xsl XPath式を使用します。
以下は、使用されるサンプルXMLです。
student.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
student.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/" >
<html>
<body>
<h3>Details of each Students. </h3>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "/class/student">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
出力を確認します
ロケーションパスは絶対パスまたは相対パスを使用してノードのロケーションを定義するため、軸は次のような関係によって要素を識別するために使用されます。 parent, child, sibling, 軸は、要素が要素に対して配置されている軸を参照するため、そのように名前が付けられています。
以下は、さまざまな軸の値のリストです。
S.No. | 軸と説明 |
---|---|
1 | ancestor ルートノードまでの親を含む、現在のノードの祖先を表します。 |
2 | ancestor-or-self 現在のノードとその祖先を表します。 |
3 | attribute 現在のノードの属性を表します。 |
4 | child 現在のノードの子を表します。 |
5 | descendant 現在のノードの子孫を表します。子孫には、ノードの子からリーフノードまでが含まれます(子はこれ以上ありません)。 |
6 | descendant-or-self 現在のノードとその子孫を表します。 |
7 | following 現在のノードの後に続くすべてのノードを表します。 |
8 | following-sibling コンテキストノードの次の兄弟を表します。兄弟は現在のノードと同じレベルにあり、その親を共有します。 |
9 | namespace 現在のノードの名前空間を表します。 |
10 | parent 現在のノードの親を表します。 |
11 | preceding 現在のノードの前(つまり、開始タグの前)にあるすべてのノードを表します。 |
12 | self 現在のノードを表します。 |
以下は、軸の使用に関するいくつかの例です。
firstname −学生ノードに関連する名を選択します。
<p><xsl:value-of select = "firstname"/></p>
<xsl:value-of select = "/class/student/preceding-sibling::comment()"/>
例
この例では、サンプルXMLドキュメントを作成しました students.xml およびそのスタイルシートドキュメント students.xsl XPath式を使用します。
以下は、使用されるサンプルXMLです。
student.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<!-- Comment: This is a list of student -->
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
student.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/" >
<html>
<body>
<xsl:value-of select = "/class/student/preceding-sibling::comment()"/>
<br/>
<xsl:text>First Student: </xsl:text>
<xsl:value-of select = "/class/student/child::firstname" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
出力を確認します
この章では、一般的に使用されるXPathをカバーするXPath演算子と関数について詳しく説明します。 defines そして handles。XPathは、ノード、文字列、数値、およびブール型の演算子と関数を定義します。
以下は、これから説明するリストです。
S.No. | 演算子/機能と説明 |
---|---|
1 | 比較演算子 値を比較するための比較演算子。 |
2 | ブール演算子 'および'、 'または'& 'not'機能をチェックするブール演算子。 |
3 | 数値関数/演算子 数値の演算子/関数。 |
4 | 文字列関数 さまざまな文字列関数。 |
5 | ノード関数/演算子 ノードに作用するさまざまな関数と演算子。 |
XPathは、XPath式で使用されるノードで次のワイルドカードを定義します。
S.No. | ワイルドカードと説明 |
---|---|
1 | * 任意のノードに一致するために使用されます。 |
2 | . コンテキスト内の現在のノードを照合するために使用されます。 |
3 | @* 任意の属性に一致するために使用されます |
4 | node() 任意のタイプのノードに一致するために使用されます |
例
この例では、各学生を反復処理することにより、詳細を含む<student>要素のテーブルを作成します。
student.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
student.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<xsl:apply-templates select = "class/*" />
</body>
</html>
</xsl:template>
<xsl:template match = "class/*">
<xsl:apply-templates select = "@rollno" />
<xsl:apply-templates select = "firstname" />
<xsl:apply-templates select = "lastname" />
<xsl:apply-templates select = "nickname" />
<xsl:apply-templates select = "marks" />
<br />
</xsl:template>
<xsl:template match = "@rollno">
<span style = "font-size = 22px;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "firstname">
First Name:<span style = "color:blue;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "lastname">
Last Name:<span style = "color:green;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "nickname">
Nick Name:<span style = "color:red;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "marks">
Marks:<span style = "color:gray;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
</xsl:stylesheet>
出力を確認します
述語は、角括弧で囲まれたXPath式を指します。これは、特定の条件に設定されたノードで選択されたノードを制限することを指します。例えば、
S.No. | 述語と説明 |
---|---|
1 | /class/student[1] class要素の子である最初のstudent要素を選択します。 |
2 | /class/student[last()] class要素の子である最後のstudent要素を選択します。 |
3 | /class/student[@rolllno = 493] rollno493で学生要素を選択します。 |
4 | /class/student[marks>85] マークが85を超える生徒要素を選択します。 |
例
この例では、各学生を反復処理することにより、詳細を含む<student>要素のテーブルを作成します。学生ノードの位置を計算し、シリアル番号とともに学生の詳細を印刷します。
student.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
student.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "/class/student[1]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select = "/class/student[last()]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select = "/class/student[@rollno = 493]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select = "/class/student[marks > 85]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>