新しいシステムや規格が登場した場合、
XMLデータベースも一般的に利用されるようになり、
XPath入門 ─ XPathとは
XPathとは、
- XPath 1.
0 : http:// www. w3. org/ TR/ xpath/ - XPath 2.
0 : http:// www. w3. org/ TR/ xpath20/
XPath 1.
XPathとほかのXML規格
XPathはXSLT、

出典:XQeury+XMLデータベース入門
XQueryは文書やデータベース、
PostgreSQL8.3とXPath
PostgreSQL 8.
PostgreSQL 8.3のXML型
PostgreSQLはXML文書をテキストのまま保存せず、
- XMLPARSE ( { DOCUMENT | CONTENT } value)
XMLPARSE (DOCUMENT '<?xml version="1.0"?><book><title>Manual</title><chapter>...</chapter></book>')
XMLPARSE (CONTENT 'abc<foo>bar</foo><bar>foo</bar>')
このほかにも::xmlを利用してテキストをXML型にキャストすることも可能です。詳しくは
を参照してください。
XPath関数
PostgreSQL 8.
- xpath(xpath, xml [, nsarray])
XMLサポートを有効にしたPostgreSQLサーバにpsqlを利用して接続すると、
yohgaki@[local] ~=# create table xml_test (id int, data xml); yohgaki@[local] ~=# insert into xml_test(id, data) values (1, xmlparse(content 'abc<foo>bar</foo><bar>foo</bar>')); yohgaki@[local] ~=# insert into xml_test(id, data) values (2, xmlparse(content 'abc<foo>bar2</foo><bar>foo2</bar>')); yohgaki@[local] ~=# select xpath('/foo//text()', data) from xml_test ; xpath -------- {bar} {bar2} (2 rows) Time: 0.391 ms
PostgreSQLをご存知の方なら
XPathの基本
本記事の目的はXPathインジェクション対策が目的ですから、
select xpath('/foo/text()', data) from xml_test ;
の
'/foo//text()'
がXPathの表現です。言葉に訳すと
“/”
となります。先の例の場合、
yohgaki@[local] ~=# select xpath('/foo//text()', data) from xml_test ; xpath -------- {bar} {bar2} (2 rows)
“/”
yohgaki@[local] ~=# select xpath('/*', data) from xml_test ; xpath ----------------------------------- {<foo>bar</foo>,<bar>foo</bar>} {<foo>bar2</foo>,<bar>foo2</bar>} (2 rows) Time: 0.373 ms
余計な
yohgaki@[local] ~=# select * from xml_test ; id | data ----+----------------------------------- 1 | abc<foo>bar</foo><bar>foo</bar> 2 | abc<foo>bar2</foo><bar>foo2</bar> (2 rows) Time: 0.246 ms
まとめ
XPathを利用すると、
次回はPHP本体に付属しているDOMモジュールのXPath関数を利用し、