2010-11-18 8 views
1

Dies ist mein TestkomponenteLesekindelemente eines XBL-Komponente und konstruieren XPath

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

ich den Wert der Instanzattribut in XBL zu lesen. Ich mache das wie folgt.

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

Ich habe die Instanznamen und XPath verketten, die Werte zu lesen, das ist, wo ich Hilfe brauchen. <xxforms:variable name="instance" select="concat('instance(''', xxforms:evaluate-avt='{/*/fr:constraint/@instance}'", ''')' />

Ich kann Xpath auf die gleiche Weise wie ich zum Beispiel lesen und dann concat mit der obigen Variable.

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

Ich werde ein paar Elemente erhalten, die Ich mag würde

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

Strings verketten wiederholen XPath zu erstellen und sie in repeat ist, wo das Problem liegt. Irgendwelche Ideen?

+0

Ich versuchte xxforms: evaluate ($ nodeset) und xxforms: evaluate (concat ($ nodeset, '/', '$ XPath')) zu. – BinnyG

Antwort

0

Es hängt von Inhalt von /*/fr:constraint/@instance:

  1. Wenn es ein AVT ist, dann ja, mit xxforms:evaluate-avt() ist der Weg zu gehen.
  2. aber vielleicht könnten Sie, dass ein XPath-Ausdruck machen, statt einem AVT, und dann könnte man einfach schreiben:

    <xxforms:variable name="instance" 
            select="{/*/fr:constraint/@instance}"/> 
    
  3. Wenn es eine Instanz-ID ist, was der Fall zu beruhen scheint auf In Ihrem Beispiel würden Sie Ihre XForms-Variable wie folgt deklarieren. Die AVT wird von XSLT interpretiert, also sieht XForms select="instance('myinstance')".

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

In der Tat xxforms: evaluate-avt hat funktioniert. Es war ein Caching-Problem in meiner App. Hier ist die folgende Frage.

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

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

Ist dies der richtige Weg, um die Variable in xforms zugreifen? Gibt es einen besseren Weg?