xpath入門_Power Node Java Academy
簡単に言うと、xpathはXMLファイルのノードを選択する方法です。
ノードとは、XMLファイルを構成する最小の単位であり、7種類のノードが存在する。
- element(要素ノード)
- 属性 (属性ノード)
- text (textノード)
- namespace (namespace ノード)
- processing-instruction (処理命令ノード)
- comment (コメントノード)
- root (ルート・ノード)
xpathはこれら7種類のノードを選択することができる。ただし、以下の注釈では、最初によく使われる要素ノードのみを取り上げているので、ノードと要素は以下では同義語とみなしてよい。
I. xpath 式の基本フォーマット
xpathは"Path Expressions"によってノードを選択します。形式的には、quot;Path Expressions" は従来のファイルシステムに非常によく似ています。
# スラッシュ(/)はパス内部でスプリッターとして機能します。
# 同じノードを絶対パスと相対パスの両方で記述します。
# 絶対パスは "/"で始まり、その後にルートノードが続く必要があります。
# 相対パスはstep/stepのように絶対パスとは別の書き方、つまり"/"で始まらない書き方をします。
# ". "は現在のノードを示します。
# ". "は現在のノードの親を示します。
II. ノードの選択に関する基本ルール
- nodename (ノード名): ノードのすべての子ノードが選択されることを示します。
- "/":ルートノードが選択されることを示す。
- "//":任意の位置のノードを選択することを意味します。
- "@":属性の選択を表します。
III. 選択ノードの例
まず、XMLの例文から見てみましょう。
<?xml version="1.0" encoding="ISO-8859-1"? >
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
[例1】のように]
bookstore: bookstore 要素のすべての子を選択します。
[例2】のように]
/bookstore : ルートノードbookstoreを選び、絶対パスで記述します。
[例3】のように]
bookstore/book: 相対パスで記述されたbookstoreの子であるbook要素をすべて選択します。
[例4】のように]
//book : ドキュメント内の位置に関係なく、すべての book 子要素を選択します。
[例5】のように]
bookstore//book: bookstore要素の子孫であるすべてのbook要素を、bookstoreの下のどこに位置するかに関係なく選択します。
[例6】のように]
//@lang : langという名前の属性をすべて選択します。
IV. xpathの述語条件(Predicate)
述語条件"述語条件"は、パス表現に付けられる条件です。
角括弧 "[]" で書かれたすべての条件は、ノードのさらなるフィルタリングを示します。
[例7】のように]
/bookstore/book[1] : bookstoreの最初のbookの子要素が選択されていることを示す。
[例8】のように]
/bookstore/book[last()] : bookstoreの最後の本の子要素が選択されていることを示す。
[例9】のように]
/bookstore/book[last()-1] : bookstoreのpenultimate book子要素が選択されたことを示す。
[例10】のように]
/bookstore/book[position()<3] : bookstoreの最初の2つのbookの子要素が選択されることを示す。
[例11】のように]
//title[@lang] : lang属性を持つ全てのtitleノードが選択されることを示す.
[例12】のように]
//title[@lang='eng'] : lang属性の値が "eng" であるすべてのタイトルノードが選択されることを示す。
[例13】のように]
/bookstore/book[price] : bookstoreのbook子要素が選択されていることを示し、選択されたbook要素にはprice子要素が必要です。
[例14】のように]
/bookstore/book[price>35.00]: bookstoreのbookサブ要素が選択され、選択されたbook要素のpriceサブ要素が35より大きい値でなければならないことを示しています。
[例15】のように]
/bookstore/book[price>35.00]/title : 例14の結果セットでtitle子要素が選択されたことを示す。
[例16】のように]
/bookstore/book/price[. >35.00] : "/bookstore/book"のprice子要素で値が35より大きいものが選択されていることを示します。
V. ワイルドカード
# は任意の要素ノードにマッチすることを意味します。
# "@*"は任意の属性値にマッチします。
# node() はあらゆるタイプのノードにマッチします。
[例17】のように]
//* : ドキュメント内のすべての要素ノードを選択します。
[例18】のように]
/*/* : 第2階層の要素ノードが全て選択されていることを示す。
[例19】のように]
/bookstore/* : bookstoreのすべての要素の子ノードが選択されることを示す。
[例20】のように]
//title[@*] : 属性を持つ全ての title 要素が選択されていることを示す。
VI. 複数パスの選択
複数の同時パスを"|"で選択します。
[例21】のように]
//book/title | //book/price : book 要素の title サブ要素および price サブ要素の両方が選択されていることを示します。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン