Namespace を使用しているXML文書に対するXPath式

NameSpace を使用しているXML文書に対する XPath 式は注意が必要です。

XPath を取り扱うライブラリに対して、どのネームスペースを使用するか、予め登録する必要もありますが、それが NG であるシチュエーションもあります。

たとえば、以下のSpring のXML Schema に対して、XPath 式の指定を考えます。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<xsd:schema xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.springframework.org/schema/beans">

	<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />

         ...

</xsd:schema>

ルート要素を指定する場合、namespace がなければ

/schema

となります。しかしネームスペースが使われていますので、上記式では要素を検索できません。

URIhttp://www.w3.org/2001/XMLSchema となっており、xpath 式で ":" と "/" は特別な記号なので、以下では処理できません。

/http://www.w3.org/2001/XMLSchema:schema

以下の指定もNGです。xsd という接頭辞がどのネームスペースに所属するか解らないので。

/xsd:schema

xpath 式の関数を使用して指定することになります。

/*[local-name()='schema' and namespace-uri()='http://www.w3.org/2001/XMLSchema']

xpath 式が長くなるのが難点です。