2010-11-18 17 views
1

Ceci est mon composant de testlecture des éléments enfants d'un composant XBL et construire XPath

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

Je dois lire la valeur de l'attribut d'instance dans XBL. Je fais comme suit.

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

je dois concaténer le nom d'instance et XPath pour lire les valeurs qui est là où je besoin d'aide. <xxforms:variable name="instance" select="concat('instance(''', xxforms:evaluate-avt='{/*/fr:constraint/@instance}'", ''')' />

Je peux lire xpath de la même manière que par exemple, puis le concaténer avec la variable ci-dessus.

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

Je vais avoir un tas d'éléments que je voudrais répéter

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

Concaténation pour créer XPath et l'utiliser en répétition est où le problème est. Des idées?

+0

J'ai essayé xxforms: évaluer (nodeset $) et xxforms: évaluer (concat (nodeset $, '/', 'XPath $)) aussi. – BinnyG

Répondre

0

Cela dépend du contenu de /*/fr:constraint/@instance:

  1. Si elle est un AVT, alors oui, utilise xxforms:evaluate-avt() est le chemin à parcourir.
  2. Cependant, vous pourriez peut-être faire qu'une expression XPath, au lieu d'un AVT, et alors vous pouvez écrire:

    <xxforms:variable name="instance" 
            select="{/*/fr:constraint/@instance}"/> 
    
  3. Si c'est un ID d'instance, qui semble être le cas basé sur Dans votre exemple, vous déclarez votre variable XForms comme suit. L'AVT est interprété par XSLT, ce que XForms voit est select="instance('myinstance')".

    <xxforms:variable name="instance" 
            select="instnce('{/*/fr:constraint/@instance}')"/> 
    
0

En fait, xxforms: evaluate-avt travaillé. C'était un problème de mise en cache dans mon application. Voici la question de suivi.

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

XForms
<xxforms:variable name="instance" select="xxforms:evaluate-avt='{/*/fr:constraint/@instance}'" />

Est-ce la bonne façon d'accéder à la variable XForms? Y a-t-il un meilleur moyen?