2

XFormsのXPathを使用して2つのノードセット値を連結したいと思っています。

XPathにconcat(string、string)関数があることは知っていますが、2つのノードセット値を連結するにはどうすればよいですか?

編集を開始: concat関数を試しました..これを試しました..そしてそれを機能させるためにそのバリエーションを試しましたが、機能しません

<xf:value ref="concat(instance('param_choices')/choice/root, .)"/>

編集終了

以下は、私が達成しようとしていることの簡略化されたコード例です。

XFormsモデル:

<xf:instance id="param_choices" xmlns="">
    <choices>
        <root label="Param Choices">/param</root>
        <choice label="Name">/@AAA</choice>
        <choice label="Value">/@BBB</choice>
    </choices>
</xf:instance>

私が現在持っているXFormsUIコード:

<xf:select ref="instance('criteria_data')/criteria/criterion" appearance="full">
    <xf:label>Param choices:</xf:label>    
    <br/>
    <xf:itemset nodeset="instance('param_choices')/choice">
        <xf:label ref="@label"></xf:label>
        <xf:value ref="."></xf:value>
    </xf:itemset>
</xf:select>    

(ユーザーが[名前]チェックボックスを選択した場合。)XML出力は次のとおりです。

<criterion>/@BBB</criterion>

でも!ルートノードセット値を現在の選択ノードセット値と組み合わせたい。

基本的に:

<xf:value ref="concat(instance('param_choices')/choice/root, .)"/>

また

<xf:value ref="(instance('definition_choices')/choice/root) + ."/>

次のXML出力を実現するには:

<criterion>/param/@BBB</criterion>

これを行う方法について何か提案はありますか?(私はXPathとXFormsにかなり慣れていません)

ps私がタイプしたとき、私が求めていることは私には理にかなっていますが、私が求めていることを理解するのに問題がある場合は、私に知らせてください。

ありがとう!

4

3 に答える 3

1

問題は、要素refの属性の代わりに属性を使用していることです。この属性は要素を単一ノードにバインドするためのものであり、属性は解決されたXPath式からの値を使用するためのものです。valuevaluerefvalue

XPath式自体にも小さな間違いがあるため、value要素を次のように変更すると、次のようになります。

<xf:value value="concat(instance('param_choices')/root, .)" />

...正しく機能することがわかるはずです。

于 2010-06-09T22:25:18.287 に答える
1

XPath式の評価では、XMLドキュメントの構造/コンテンツを変更することはできません。既存のノード(のセット)のみを選択します。

XMLドキュメントに存在しないノードを生成するには、XPathと組み合わせて他の手段(XSLTなど)を使用する必要があります。

于 2010-06-09T19:40:50.927 に答える
1

動的XPath式の構築は、XFormsではまだサポートされていません。Javascriptにはeval()のような関数はありません。

非常に限られた回避策として、次のような式を使用できます。

/*[name() = substring-after(instance('param_choices')/root,'/')]/@*[name() = substring-after(.,'/@')]

于 2010-06-10T04:13:54.323 に答える