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" />

XForms
<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. 但是,也许您可​​以将其设为 XPath 表达式,而不是 AVT,然后您可以编写:

    <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 回答