У меня есть глобальная переменная 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>
Не могли бы вы разместить [mcve], пожалуйста? Я считаю, что вы должны использовать функцию 'index-of()', но трудно точно сказать, как именно. –
Я бы привел пример, если вы еще не решили проблему. Большое спасибо. Я не знал об индексе(), но он работает по назначению. (Вы хотели бы опубликовать его как ответ для меня, чтобы выбрать?) –
Я сделал, но без контекста он не поможет никому другому читать это. –