| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「XPath」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==XPath== http://www.techscore.com/tech/XML/XPath/xpath01-2.html http://www.w3.org/TR/xpath Java XPath ====XPath のデータモデル==== XML データを以下の…」)
 
 
(同じ利用者による、間の1版が非表示)
1行目: 1行目:
==XPath==
+
==[[XPath]]==
http://www.techscore.com/tech/XML/XPath/xpath01-2.html
+
http://www.techscore.com/tech/XML/[[XPath]]/xpath01-2.html
http://www.w3.org/TR/xpath
+
http://www.w3.org/T[[R]]/xpath
Java XPath
+
[[Java XPath]]
====XPath のデータモデル====
+
====[[XPath]] のデータモデル====
XML データを以下の 7 種類のノードから構成されるツリーと考える。
+
[[XML]] データを以下の 7 種類のノードから構成されるツリーと考える。
  
 
*ルートノード:最上位ノード
 
*ルートノード:最上位ノード
*要素ノード:XML の要素を表すノード
+
*要素ノード:[[XML]] の要素を表すノード
 
* テキストノード:開始タグと終了タグで挟まれた文字列データ
 
* テキストノード:開始タグと終了タグで挟まれた文字列データ
 
* 属性ノード:要素内で指定された属性を表すノード
 
* 属性ノード:要素内で指定された属性を表すノード
 
* 名前空間ノード:名前空間 (Namespace) を表すノード
 
* 名前空間ノード:名前空間 (Namespace) を表すノード
* 処理命令ノード:処理命令 (Processing Instruction) を表すノード(処理命令とは <? と ?> で挟まれた一文のこと)。XML 宣言は処理命令の形をしていますが、XML 1.0 の構文上、処理命令ではないため、XML 宣言は処理命令ノードとしては扱いません。
+
* 処理命令ノード:処理命令 (Processing Instruction) を表すノード(処理命令とは &lt;? と ?&gt; で挟まれた一文のこと)。[[XML]] 宣言は処理命令の形をしていますが、[[XML]] 1.0 の構文上、処理命令ではないため、[[XML]] 宣言は処理命令ノードとしては扱いません。
 
* コメントノード:コメントを表すノード(ただし、ドキュメント型宣言内に記述するコメントを除きます)
 
* コメントノード:コメントを表すノード(ただし、ドキュメント型宣言内に記述するコメントを除きます)
  
22行目: 22行目:
 
         + ddd
 
         + ddd
  
という構造を bbb->ccc->dddとたどるとき、起点となる aaa をコンテキストノード、bbb/ccc/ddd をロケーションパスという
+
という構造を bbb-&gt;ccc-&gt;dddとたどるとき、起点となる aaa をコンテキストノード、bbb/ccc/ddd をロケーションパスという
  
 
====ロケーションパス (簡略な記述法)====
 
====ロケーションパス (簡略な記述法)====
92行目: 92行目:
  
 
ここまで、メモした
 
ここまで、メモした
http://www.techscore.com/tech/XML/XPath/xpath03.html
+
http://www.techscore.com/tech/XML/[[XPath]]/xpath03.html
  
====XPathの基本====
+
====[[XPath]]の基本====
  <Media>
+
  &lt;Media&gt;
   <Book Author="a1" Title="t1"/>
+
   &lt;Book Author="a1" Title="t1"/&gt;
   <Book Author="a2" Title="t2"/>
+
   &lt;Book Author="a2" Title="t2"/&gt;
   <Book Author="a3" Title="t3"/>
+
   &lt;Book Author="a3" Title="t3"/&gt;
   <CD Artist="a4" title="t4"/>
+
   &lt;CD Artist="a4" title="t4"/&gt;
   <DVD Directory="d1" Title="t5">
+
   &lt;DVD Directory="d1" Title="t5"&gt;
     <Actor>A1</Actor>
+
     &lt;Actor&gt;A1&lt;/Actor&gt;
     <Actor>A2</Actor>
+
     &lt;Actor&gt;A2&lt;/Actor&gt;
   </DVD>
+
   &lt;/DVD&gt;
  </Media>
+
  &lt;/Media&gt;
 
*「/」 は最も一般的な演算子で目的の要素へのパスを構築できる(eg:Media/CD)
 
*「/」 は最も一般的な演算子で目的の要素へのパスを構築できる(eg:Media/CD)
 
** Media/Book を選択すると以下が生成される
 
** Media/Book を選択すると以下が生成される
  <Book Author="a1" Title="t1"/>
+
  &lt;Book Author="a1" Title="t1"/&gt;
  <Book Author="a2" Title="t2"/>
+
  &lt;Book Author="a2" Title="t2"/&gt;
  <Book Author="a3" Title="t3"/>
+
  &lt;Book Author="a3" Title="t3"/&gt;
*XPathによって、ノードのリストまたは単一のノードが生成されるという考え方はXMLバインディングを学ぶ上で極めて重要
+
*[[XPath]]によって、ノードのリストまたは単一のノードが生成されるという考え方はXMLバインディングを学ぶ上で極めて重要
*XMLでは要素の属性の両方がXMLノードとみなされる
+
*[[XML]]では要素の属性の両方が[[XML]]ノードとみなされる
*XPathは実際には要素だけでなくノードを選択することによって機能する
+
*[[XPath]]は実際には要素だけでなくノードを選択することによって機能する
 
*属性名を参照するには 「@」を演算子を使用する
 
*属性名を参照するには 「@」を演算子を使用する
 
** Media/Book/@Title を使用すると、次の内容が返る(XmlAttributeNode型)
 
** Media/Book/@Title を使用すると、次の内容が返る(XmlAttributeNode型)
121行目: 121行目:
 
*「[]」演算子を使用すると、位置または属性によってノードを選択できる(インデックス 1ベース)
 
*「[]」演算子を使用すると、位置または属性によってノードを選択できる(インデックス 1ベース)
 
** Media/Book[1] を選択すると以下が生成される
 
** Media/Book[1] を選択すると以下が生成される
  <Book Author="a1" Title="t1"/>
+
  &lt;Book Author="a1" Title="t1"/&gt;
 
*属性による選択
 
*属性による選択
 
** Media/Book/[@Author="t1"]
 
** Media/Book/[@Author="t1"]
  <Book Author="a1" Title="t1"/>
+
  &lt;Book Author="a1" Title="t1"/&gt;
  
 
{|class="wikitable"
 
{|class="wikitable"
!XPath
+
![[XPath]]
 
!説明
 
!説明
 
!例
 
!例

2020年2月16日 (日) 04:35時点における最新版

XPath

http://www.techscore.com/tech/XML/XPath/xpath01-2.html http://www.w3.org/TR/xpath Java XPath

XPath のデータモデル

XML データを以下の 7 種類のノードから構成されるツリーと考える。

  • ルートノード:最上位ノード
  • 要素ノード:XML の要素を表すノード
  • テキストノード:開始タグと終了タグで挟まれた文字列データ
  • 属性ノード:要素内で指定された属性を表すノード
  • 名前空間ノード:名前空間 (Namespace) を表すノード
  • 処理命令ノード:処理命令 (Processing Instruction) を表すノード(処理命令とは <? と ?> で挟まれた一文のこと)。XML 宣言は処理命令の形をしていますが、XML 1.0 の構文上、処理命令ではないため、XML 宣言は処理命令ノードとしては扱いません。
  • コメントノード:コメントを表すノード(ただし、ドキュメント型宣言内に記述するコメントを除きます)

コンテキストノード

  • 通過点を指定することにより目的のデータに至る経路のことをロケーションパスという
  1. aaa
  2. + bbb
  3. + ccc
  4. + ddd

という構造を bbb->ccc->dddとたどるとき、起点となる aaa をコンテキストノード、bbb/ccc/ddd をロケーションパスという

ロケーションパス (簡略な記述法)

  • ロケーションパスの書き方には、厳密かつ詳細に記述する書き方と、簡略に記述する書き方の 2 つがある
  • 以下の構文で示されたものを 1個以上 "/"で繋いだものがロケーションパスとなる。
  • ひとつのロケーションパス式の評価が終わるとコンテキストノードは最初にあったノードに戻る
構文 意味
para コンテキストノードの子要素 para を選択
* コンテキストノードのすべての子要素を選択
text() コンテキストノードのすべての子テキストノードを選択
@name コンテキストノードの name 属性を選択
@* コンテキストノードのすべての属性を選択
para[1] コンテキストノードの 1番目の子要素 para を選択
para[last()] コンテキストノードの最後の子要素 para を選択
//para ルートノードの子孫ノードから要素ノード para をすべて選択。つまり、コンテキストノードと同じ文書内のすべての para 要素を選択
.(ピリオド) コンテキストノードを選択
..(ダブルピリオド) コンテキストノードの親を選択
chapter[title="Introduction"] コンテキストノードの子要素 chapter のうち、文字列値が Introduction である子要素 title を 1個以上持つものを選択
chapter[title] コンテキストノードの子要素 chapter のうち、子要素 title を 1個以上持つものを選択
employee[@secretary and @assistant] secretary 属性と assistant 属性の両方をもつコンテキストノードの子要素 employee をすべて選択

ロケーションパス

ロケーションパスは "/" で区切られた 1つ以上のロケーションステップと呼ばれる単位からなっており、以下の 3つのパートからなる。

パート 説明
選択するノードとコンテキストノードとの間のツリー上の位置関係を指定する
ノードテスト 選択するノードのノード型と名前を指定する
述語 選択するノードの集合を、任意の式を使用してさらに細かく選別する


ここまで、メモした http://www.techscore.com/tech/XML/XPath/xpath03.html

XPathの基本

  1. <Media>
  2. <Book Author="a1" Title="t1"/>
  3. <Book Author="a2" Title="t2"/>
  4. <Book Author="a3" Title="t3"/>
  5. <CD Artist="a4" title="t4"/>
  6. <DVD Directory="d1" Title="t5">
  7. <Actor>A1</Actor>
  8. <Actor>A2</Actor>
  9. </DVD>
  10. </Media>
  • 「/」 は最も一般的な演算子で目的の要素へのパスを構築できる(eg:Media/CD)
    • Media/Book を選択すると以下が生成される
  1. <Book Author="a1" Title="t1"/>
  2. <Book Author="a2" Title="t2"/>
  3. <Book Author="a3" Title="t3"/>
  • XPathによって、ノードのリストまたは単一のノードが生成されるという考え方はXMLバインディングを学ぶ上で極めて重要
  • XMLでは要素の属性の両方がXMLノードとみなされる
  • XPathは実際には要素だけでなくノードを選択することによって機能する
  • 属性名を参照するには 「@」を演算子を使用する
    • Media/Book/@Title を使用すると、次の内容が返る(XmlAttributeNode型)
  1. Title="t1"
  2. Title="t2"
  3. Title="t3"
  • 「*」演算子を使用すると、任意の名前付きノード(属性または要素)を取得できる
  • 「[]」演算子を使用すると、位置または属性によってノードを選択できる(インデックス 1ベース)
    • Media/Book[1] を選択すると以下が生成される
  1. <Book Author="a1" Title="t1"/>
  • 属性による選択
    • Media/Book/[@Author="t1"]
  1. <Book Author="a1" Title="t1"/>
,[],位置または属性によって子タグを選択
XPath 説明
/ ルート以下を選択 /
//NAME 任意の子孫のNAMEというタグにマッチ //Book
@NAME NAMEという属性にマッチ //Book/@Author
* 任意のタグにマッチ //*/@Author
@* 任意の属性にマッチ //Book/@*
NAME NAMEというタグにマッチ /Media
//Book[1],//Book[@Author='a1']