2

文字列リテラルから xpath 式を実行しようとしています。いくつかの変数から xpath を作成するので、変数を事前に計算することはできません。私はこのようなsthで終わります:

count(concat("//sales:", "$variable", "Available"))

エラーが発生します。

Can not convert #STRING to a NodeList!

concat の結果を何らかの形でevaluate()して、実際の NodeList になるようにすれば十分だと思います。これを行うための適切な機能はありますか?

私は Apache Camel でこのテキスト操作を行っていますが、それほど重要ではありません。

編集:

より正確に言うと、Apache Camel はパイプラインとして機能し、XML はパイプラインを通過し、それらの XML をいくつかの方法で処理できます。たとえば、XML のコンテンツまたは構造に基づいていくつかのルールを課すことができます。そのため、これを動的にする必要があります。

私の状況は次のようになります。

  1. xml を見て、要素operationNameの内容を取得します
  2. 他のドキュメントで、小文字のoperationNameと文字列リテラル 'Available'から構成される要素を検索します

したがって、私のoperationNameが FOOBAR の場合、ノード//sales:foobarAvailableの存在を確認したい

4

2 に答える 2

2

動的に生成された XPath 式の評価は、バージョン 3.0 まで XSLT/XPath でサポートされていません。これは現在、初期の WD (ワーキング ドラフト) 状態にあります。

XPath 式についてより多くのことがわかっている場合は、通常、何らかの解決策を設計できます。

したがって、問題をより詳細に説明すると、誰かが助けてくれる可能性が高くなります。

UPDATE:OPからのこの新しい情報があります:

したがって、私の操作名がFOOBARの場合、ノードの存在を確認したい//sales:foobarAvailable

これは簡単に行うことができます:

使用:

//sales:*[local-name()
         =
          concat(translate(operationName, $vUpper, $vLower), 'Available')
         ]

ここで、$vUpper と $vLower は次のように定義されます (置換可能):

'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

'abcdefghijklmnopqrstuvwxyz'
于 2011-02-21T17:24:43.973 に答える
0

お使いの XSLT プロセッサに xx:evaluate 拡張機能がない場合 (および、拡張機能を備えたものに切り替えることができない場合)、状況によっては役立つ別の手法として、メタ スタイルシートを作成する方法があります。別のスタイルシートを変更します。次に、これら 2 つを何らかのパイプラインで実行します。

于 2011-02-21T23:08:48.047 に答える