xpath

neta

XPath 1.0 は貧弱だなぁと改めて思った。属性値列挙型に弱すぎる。 body > div.section > div.section 的なことをがんばった例。 var pred = [ 'contains(concat("^", @class), "^section")', 'contains(concat(@class, "$"), "section$")', 'contains(@clas…

述部 and と [...][...] の違い

and は左辺、右辺の評価順が XSLT プロセッサ実装依存だそうな。 なので、[.!="" and .<=4] と [.!=""][.<=4] は等価じゃない。

preceding-sibling軸が気になるお年頃

やっぱりきもいんだよなあ……。 XML <ひだまり荘> <ゆの/> <宮子/> <ヒロ/> <沙英/> </ひだまり荘> XPath //沙英/preceding-sibling::*[3] result <ゆの/> じゃんすか。文書出現順とは逆に辿る。でも、 XQuery for $_ in fn:doc()//沙英/preceding-sibling::* return $_ re…

XMLマスター:プロフェッショナル(データベース) 出題傾向【予想】

これも長いクエリー式の中にさらりと出そう。つまらないミスは絶対にできない。 @attr/text() 属性値の取得にtext()は使えないっす。 fn:string(@attr) fn:string()関数を使いませう。

XPath関数メモ fn:string()

hoge.xml <course> <master><last>中林</last><first>太郎</first></master> <master><last>中</last><first>林太郎</first></master> </course> hoge.xq for $master in fn:doc("hoge.xml")/course/master return <result> <master>{ fn:string($master) }</master> </result> 結果XMLデータ <result> <master>中林太郎</master> </result> …

XPathで忘れがちなこと

ノードシーケンスの結合 - except演算子 シーケンス差をとる。 data8.xml <abc> <x>1</x> <x>2</x> <def/> <x>3</x> <x>4</x> <def/> </abc> chap3-25.xq fn:doc("data8.xml")//x[. << ../def[2]] except fn:doc("data8.xml")//x[. << ../def[1]] 結果 <x>3</x> <x>4</x>

XPathで忘れがちなこと

ノードシーケンスの結合 - intersect演算子 シーケンス積をとる。 data7.xml <abc> <def g="1"/> <x>1</x> <def g="2"/> <def g="3"/> <x>1</x> <def g="4"/> </abc> chap3-24.xq fn:doc("data7.xml")//def[. >> ../x[1]] intersect fn:doc("data7.xml")//def[. << ../x[2]] 結果 <def g="2"/> <def g="3"/></def></def>

XPathで忘れがちなこと

ノードシーケンスの結合 - union演算子 シーケンス和をとる。 data6.xml <abc> <x>1</x> <x>2</x> <def/> <x>3</x> <def/> <x>4</x> <x>5</x> </abc> chap3-23.xq fn:doc("data6.xml")//x[. << ../def[2]] union fn:doc("data6.xml")//x[. >> ../def[1]] 結果 <x>1</x> <x>2</x> <x>3</x> <x>4</x> <x>5</x>

XPathで忘れがちなこと

述部の話。 [. != ""][. <= 4]の結果と、 [. != "" and . <= 4]の結果は一致するとは限らない。and演算子は左辺と右辺、どちらを先に評価するか実装依存だから。

XPathで忘れがちなこと

パス式内での軸の使用 - preceding-sibling軸 preceding-sibling軸に()使うときもい。 ※註: eXistでクエリー投げても下記の結果にはなりません。あくまで仕様上の話。 data1.xml <abc> <x>1</x> <x>2</x> <def> <x>3</x> <x>4</x> <x>5</x> <x>6</x> </def> <x>7</x> <x>8</x> <def> <x>9</x> <x>10</x> </def> </abc> chap3-11.xq fn:doc("data1.xml")//x[4]/(precedi…

XPathで忘れがちなこと

あるいは、知らなかったこと。よくXMLマスター:プロフェッショナル(アプリケーション開発)受かったな。 パス式内での()の使用 うわー。使ったことない。やばい。 data1.xml <abc> <x>1</x> <x>2</x> <def> <x>3</x> <x>4</x> <x>5</x> <x>6</x> </def> <x>7</x> <x>8</x> <def> <x>9</x> <x>10</x> </def> </abc> chap3-08.xq fn:doc("data1.xml")/abc/(def/x)[5] 結果 <x></x>…

XPath式メモ(基礎)

XPath 2.0式 「,」でつながれてない式 単一式(Single Expressions) 「,」でつながれた式 式(Expressions) 以下、スキーマによって型付けされていない場合の式メモ。 算術式 1 + 2 → 3 1 + <x>2</x> → 3 <x>1</x> + <x>2</x> → 3 1 + <x>abc</x> → error 値比較式 演算子 説明 eq equal ne…