2018-04-09

(自習メモ)Java XPath で名前空間を使うには(setNamespaceAwareを忘れるな)

なんとなくぐぐって javax.xml.xpath パッケージは使えるようになった。
https://docs.oracle.com/javase/jp/8/docs/api/javax/xml/xpath/package-summary.html

で、問題は名前空間をどう使うか。
API を見るだけで、 NamespaceContext インターフェイスの実装を作って xpath.setNamespaceContext してやればいいのだろうという察しはつく。
http://d.hatena.ne.jp/sunflat/20080430/p2

だがそれだけじゃない。
名前空間アウェアになった XPath オブジェクトをぶつける先の Document も名前空間アウェアに作っておかないといけない。
http://www.edankert.com/defaultnamespaces.html#JAXP_XPathFactory
https://www.ibm.com/developerworks/jp/xml/library/x-javaxpathapi.html

あたりの例をよーくみると、DocumentBuilderFactory に setNamespaceAware(true) を仕掛けている。これを忘れるとまともに動作しない。

そのうえで、一点注意すべきことは、XPath 内でデフォルト名前空間にURIを割り付けることはできないようで、URIつき要素は全てプレフィクス付きXPath式で指示する必要がある。
これはそこらのブログには書いていないようだ。

0 件のコメント:

コメントを投稿