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
となります。しかしネームスペースが使われていますので、上記式では要素を検索できません。
URI が http://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 式が長くなるのが難点です。