Hitachi

Cosminexus V11 アプリケーションサーバ Cosminexus XML Processor ユーザーズガイド


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インスタンスを持つ。

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式はサポートしません。

14

値が重複したID型属性を含むXML文書に対してid関数を適用した場合,id関数の結果が不正になることがあります。