1

ユーザー定義の XPath 式を受け入れ、ランタイム操作の一部として使用するアプリケーションを開発しています。

ただし、式をプログラムで操作することにより、いくつかの追加データを推測できるようにしたいと考えています。また、このアプローチが失敗する可能性がある状況があるかどうかを知りたいと思っています。

ノード セットを返すユーザー定義の XPath 式が与えられた場合、それを XPathcount()関数でラップしてセット内のノード数を決定しても安全ですか。

count(user_defined_expression)

同様に、式に配列インデックスを追加して、セット内のノードの 1 つを抽出しても安全ですか。

user_defined_expression[1]
4

3 に答える 3

3

XPath 式 (XPath 1.0 の場合) は、ノードセット、文字列、数値、またはブール値を生成でき、count(expression) を実行すると、ノードセットを生成する式でのみ意味があります。

位置述語の追加に関しては、式の周りに括弧を使用することをお勧めします。つまり、選択したノードセットの最初の要素を選択するように変更/root/foo/barすると、最初の子要素が選択されます。要素の子要素の。(/root/foo/bar)[1]bar/root/foo/bar/root/foo/bar[1]barfooroot

于 2011-02-15T12:06:54.043 に答える
2

そのようなユーザー定義の式が常にノードセットに評価されることを確認していますか?

はいの場合、最初の Expr は問題ありません。データ型は正しいですfn:count

2 つ目はかなりトリッキーです。たとえば、述語が軸をオーバーウェイトする状況が多くあります。簡単な分析については、この回答を確認してください。ユーザーが本当に何を意味したかを言うのは難しいでしょう。

于 2011-02-15T11:59:52.280 に答える
1

より堅牢なアプローチは、XPath式を抽象構文ツリーのXML表現であるXQueryXに変換することです。次に、このXML表現に対してXQueryまたはXSLT変換を実行してから、評価のために変更されたXPath(またはXQuery)に変換し直すことができます。

ただし、これでも式の構文構造のみが得られます。結果の推定静的型などのセマンティック情報が必要な場合は、おそらく、この情報を公開するXPathプロセス内を突く必要があります。

于 2011-02-15T15:37:18.377 に答える