2016-07-01 3 views
-1

У меня есть глобальная переменная name="cats" as="element()*. Данные, которые я использовал для создания переменной, и данные, которые я хочу преобразовать, находятся в разных частях дерева документа.
Скажем, переменная содержит элементы CellA, CellF и CellC (заключенные в теги <Item>).xslt нахождение позиции определенного элемента в переменной

Моя цель состоит в том, чтобы заполнить следующую предопределенную структуру данными из таблицы, которая содержит столько ячеек <field> за <line> как переменная (и в том же порядке).

<row> 
    <CellA> </CellA> 
    <CellB> </CellB> 
    <CellC> </CellC> 
    <CellD> </CellD> 
    <CellE> </CellE> 
    <CellF> </CellF> 
</row> 

Моя идея заключается в том, чтобы проверить для каждого <Cell_>, если имя существует в переменной и использовать свое положение для доступа к исходным данным.
К сожалению, я не могу использовать position(), переходя через $cats, потому что я не могу получить доступ к <field> здесь.

Другим методом, который был предложен в другом месте, было бы подсчет числа предшествующих братьев и сестер, где $cats = Cell_. Однако это предложение не основывалось на переменных. И (из-за того, что я был новичком), я не мог понять, как это сделать.
Можно ли это сделать так? Есть ли другой способ сделать это?

Если что-то неясно, сообщите мне.

Дополнительная информация

sourceXML

<body> 
    <line> 
     <field>data</field> 
     <field/> 
     <field/> 
    </line> 
    <line/> 
    ... 
</body> 

targetXML (смотри выше)

XSLT

<xsl:variable name="cats" as="element()*"> 
    <Item>CellA</Item> 
    <Item>CellF</Item> 
    <Item>CellC</Item> 
</xsl:variable> 
<xsl:for-each select="body/line"> 
    <row> 
     <CellA> 
      *What to do here to fill it with data from source xml* 
      <xsl:variable name="pos" select="???"/> 
      <xsl:value-of select="field[$pos]"/> 
     </CellA> 
     <CellB> 
     </CellB> 
     ... 
    </row> 
+1

Не могли бы вы разместить [mcve], пожалуйста? Я считаю, что вы должны использовать функцию 'index-of()', но трудно точно сказать, как именно. –

+0

Я бы привел пример, если вы еще не решили проблему. Большое спасибо. Я не знал об индексе(), но он работает по назначению. (Вы хотели бы опубликовать его как ответ для меня, чтобы выбрать?) –

+1

Я сделал, но без контекста он не поможет никому другому читать это. –

ответ

0

Моя идея - проверить для каждого <Cell_>, если имя существует в переменной и использует свою позицию для доступа к исходным данным.

Видимо, вы хотите использовать функцию index-of().

Смежные вопросы