Чтение дочерних элементов компонента XBL и создание xpath - PullRequest
1 голос
/ 18 ноября 2010

Это мой тестовый компонент

<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 и повторное его использование - вот где проблема. Есть идеи?

Ответы [ 2 ]

0 голосов
/ 20 ноября 2010

Зависит от содержания /*/fr:constraint/@instance:

  1. Если это AVT, то да, использование xxforms:evaluate-avt() - это путь.
  2. Однако, возможно, вы могли бы сделать это XPath-выражением вместо AVT, и тогда вы могли бы просто написать:

    <xxforms:variable name="instance"
                      select="{/*/fr:constraint/@instance}"/>
    
  3. Если это идентификатор экземпляра, который, по-видимому, соответствует вашему примеру, вы бы объявили свою переменную XForms следующим образом. AVT интерпретируется XSLT, поэтому XForms видит: select="instance('myinstance')".

    <xxforms:variable name="instance" 
                      select="instnce('{/*/fr:constraint/@instance}')"/>
    
0 голосов
/ 18 ноября 2010

На самом деле xxforms: оцените-AVT работал.Это была проблема с кэшированием в моем приложении.Вот следующий вопрос:

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

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

Это правильный способ доступа к переменной в xforms?Есть ли лучший способ?

...