6.11 javax.xml.xpathパッケージに関する注意事項

javax.xml.xpathパッケージに関する注意事項を次の表に示します。

表6-21 javax.xml.xpathパッケージに関する注意事項

項番注意事項
1マルチスレッドプログラミングをする場合,XPathFactoryクラスはスレッドセーフではありません。したがって,複数のスレッドが同時に同一のXPathFactoryインスタンスにアクセスしてはいけません。スレッド間の競合を避けるため,次のどちらかの方法を使用してください。
  • 各スレッドに1つのXPathFactoryインスタンスを持つ。
  • 各スレッドが排他的にXPathFactoryインスタンスにアクセスする。
2マルチスレッドプログラミングをする場合,XPathFactoryクラスのnewInstanceメソッドで生成されるXPathインスタンス,およびXPathインタフェースのcompileメソッドで生成されるXPathExpressionインスタンスはスレッドセーフではありません。したがって,複数のスレッドが同時に同一のXPathインスタンス,およびXPathExpressionインスタンスにアクセスしてはいけません。スレッド間の競合を避けるため,次の方法を使用してください。
  • 各スレッドに1つのXPathインスタンス,およびXPathExpressionインスタンスを持つ。
3XPathFactoryクラスのnewInstance(String uri)メソッドの引数に指定可能なURIは"http://java.sun.com/jaxp/xpath/dom"だけです。
4次のメソッドを用いて,コンテキストを参照するようなXPath式を評価する場合は,引数itemにnullではないコンテキストを指定してください。
  • XPathインタフェースのevaluate(String expression, Object item, QName returnType)メソッド
  • XPathインタフェースのevaluate(String expression, Object item)メソッド
  • XPathExpressionインタフェースのevaluate(Object item, QName returnType)メソッド
  • XPathExpressionインタフェースのevaluate(Object item)メソッド
5この表の項番4で示したメソッドの引数itemには,Document,DocumentFragment,Element,Text,Attr,ProcessingInstruction,Commentのどれかのオブジェクトを指定してください。
6XPathFunctionインタフェースを実装するクラスのevaluateメソッドの戻り値の型,および, XPathVariableResolverインタフェースを実装するクラスのresolveVariableメソッドの戻り値の型は,java.lang.String,java.lang.Boolean,java.lang.Number,org.w3c.Node,org.w3c.NodeListのどれかにしてください。
7javax.xml.xpathパッケージのメソッドで例外が発生した場合,発生した例外オブジェクトにgetMessageメソッドを適用した戻り値がnullになり詳細メッセージを取得できないことがあります。この場合,例外オブジェクトにgetCauseメソッドを適用して「ラップされた例外オブジェクト」を取得し,これにgetMessageメソッドを適用することで,詳細なメッセージを取得できる場合があります。
8and,or,mod,div演算子の前後には,空白を入れてください。
(例)"1000 div 10"
9次のすべての条件が重なるXPath式はサポートしません。
  1. | 演算子のオペランドのそれぞれにノードセットを返すXPath関数を指定して,ノードセットの和集合を作成する。
  2. 1.で作成したノードセットの和集合に述語を適用する。
10次のすべての条件が重なるXPath式はサポートしません。
  1. local-name,namespace-uri,nameのどれかの関数を使用する。
  2. 1.で示した関数の引数に次の式を指定する。
      self::node()/descendant::prefix1:* (※)
    この場合,1.で示した関数の引数を次の式に変更することで回避できます。
      self::node()/self::node()/descendant::prefix1:* (※)
    注※:prefix1は,任意の名前空間接頭辞を表します。
11属性ノード,名前空間ノードにfollowing-sibling軸を適用したXPath式はサポートしません。
12| 演算子のオペランドがロケーションセット以外のXPath式はサポートしません。
13名前空間接頭辞と名前空間URIの組が等しい名前空間ノードが複数存在するとき,それらの名前空間ノードに軸を適用するXPath式はサポートしません。
14値が重複したID型属性を含むXML文書に対してid関数を適用した場合,id関数の結果が不正になることがあります。