Cosminexus XML Processor ユーザーズガイド

[目次][用語][索引][前へ][次へ]

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

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

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

項番 注意事項
1 マルチスレッドプログラミングをする場合,XPathFactoryクラスはスレッドセーフではありません。したがって,複数のスレッドが同時に同一のXPathFactoryインスタンスにアクセスしてはいけません。スレッド間の競合を避けるため,次のどちらかの方法を使用してください。
  • 各スレッドに一つのXPathFactoryインスタンスを持つ。
  • 各スレッドが排他的にXPathFactoryインスタンスにアクセスする。
2 マルチスレッドプログラミングをする場合,XPathFactoryクラスのnewInstanceメソッドで生成されるXPathインスタンス,およびXPathインタフェースのcompileメソッドで生成されるXPathExpressionインスタンスはスレッドセーフではありません。したがって,複数のスレッドが同時に同一のXPathインスタンス,およびXPathExpressionインスタンスにアクセスしてはいけません。スレッド間の競合を避けるため,次の方法を使用してください。
  • 各スレッドに一つのXPathインスタンス,およびXPathExpressionインスタンスを持つ。
3 XPathFactoryクラスの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のどれかのオブジェクトを指定してください。
6 XPathFunctionインタフェースを実装するクラスのevaluateメソッドの戻り値の型,および, XPathVariableResolverインタフェースを実装するクラスのresolveVariableメソッドの戻り値の型は,java.lang.String,java.lang.Boolean,java.lang.Number,org.w3c.Node,org.w3c.NodeListのどれかにしてください。
7 javax.xml.xpathパッケージのメソッドで例外が発生した場合,発生した例外オブジェクトにgetMessageメソッドを適用した戻り値がnullになり詳細メッセージを取得できないことがあります。この場合,例外オブジェクトにgetCauseメソッドを適用して「ラップされた例外オブジェクト」を取得し,これにgetMessageメソッドを適用することで,詳細なメッセージを取得できる場合があります。
8 and,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式はサポートしません。