目次

XML/XPath

XMLでの要素の位置特定の記述XPathの書き方に関して。XMLに対するSQLみたいなもん。

全位置

根元に書くスラッシュ2個は全位置を意味する。全ノードの親ノード集合体と考えるとわかりやすいか

//

全要素セレクト

全部の位置に対しての全部の要素なので全要素

//*

ルートノードのセレクト

いきなり要素を書くとルートノードからの検索になる

html

子要素の選択

スラッシュで区切って書く。 スラッシュは単なる区切りなんだけど、その後に何も書かないと子要素を選択したという省略形になるので子要素の選択になる

html/body

どんどんもぐる

html/body/p/a

子孫要素の選択

スラッシュ2個

html//p

階層の下に複数要素あるんだけど

複数要素にヒットしている。そのまま。

同一種の複数要素から1つを特定したいんですけど

XMLの書いてある場所で特定する

2番目なら2

html/body/p/a[position()=2]

XPathでの1番目は1。ゼロじゃない

省略で

html/body/p/a[2]

こうとも書ける。 この2は合致している範囲で2番目にあるやつ全部なので全体での2番目ではない

属性を参考にノードを取得したい

特定の属性値を持つノードを取得する

html/body/hoge[@zokuseiname='ぞくせいの値だよ']

特定の属性(not属性値)を持つノードを取得したい

html/body/hoge[@zokuseiname]

属性名だけ指定してやるとそうなる

特定の属性(not属性値)を持たないノードを取得したい

html/body/hoge[not(@zokuseiname)]

複合条件でとりたい

AND 条件

これはヒットした中からもう一度ヒットさせるということ

html/body[@class='hoge'][@type='button']

OR 条件

和集合の演算子が

|

らしいのでおそらく

html/body[@class='hoge'][@type='button']|html/body[@class='hoge'][@type='checkbox']

このように記述できるのであろう・・・

テキストノードをとりたい

html/body/h1[position=1]text()

Tag