1

これは私のテストコンポーネントです

<fr:mycomponent name="test">
<fr:constraint instance="myinstance" xpath="item/@id" />
</fr:mycomponent>

XBLのインスタンス属性の値を読み取る必要があります。私は次のようにしています。

<xsl:value-of select="./fr:constraint/@instance" />
また <xxforms:variable name="instance" select="xxforms:evaluate-avt='{/*/fr:constraint/@instance}'" />

ヘルプが必要な値を読み取るには、インスタンス名とxpathを連結する必要があります。 <xxforms:variable name="instance" select="concat('instance(''', xxforms:evaluate-avt='{/*/fr:constraint/@instance}'", ''')' />

たとえば、xpathを同じ方法で読み取って、上記の変数と連結することができます。

<xxforms:variable name="xpath" select="xxforms:evaluate-avt='{/*/fr:constraint/@xpath}'" />
<xxforms:variable name="nodeset" select="concat($instance, '/', $xpath)" />

繰り返したい要素がたくさんあります

<xforms:repeat nodeset="$nodeset">
<xforms:output value="." />
<xforms:repeat/>

文字列を連結してxpathを作成し、それを繰り返し使用することが問題です。何か案は?

4

2 に答える 2

0

実際、xxforms:evaluate-avt は機能しました。アプリのキャッシュの問題でした。これがフォローアップの質問です。

XSLT
<xsl:value-of select="./fr:constraint/@instance" />

Xフォーム
<xxforms:variable name="instance" select="xxforms:evaluate-avt='{/*/fr:constraint/@instance}'" />

これは xforms で変数にアクセスする正しい方法ですか? より良い方法はありますか?

于 2010-11-18T15:48:48.843 に答える
0

の内容によって異なります/*/fr:constraint/@instance:

  1. AVT の場合は、はい、使用xxforms:evaluate-avt()する方法です。
  2. ただし、AVT の代わりに XPath 式を作成して、次のように記述することもできます。

    <xxforms:variable name="instance"
                      select="{/*/fr:constraint/@instance}"/>
    
  3. あなたの例に基づいていると思われるインスタンスIDの場合、XForms変数を次のように宣言します。AVT は XSLT によって解釈されるため、XForms が認識するのはselect="instance('myinstance')".

    <xxforms:variable name="instance" 
                      select="instnce('{/*/fr:constraint/@instance}')"/>
    
于 2010-11-20T02:36:56.207 に答える