2014-12-10 3 views
0

мне нужно преобразовать что-то вроде следующего (фрагмент из экспорта FileMaker FMPXMLRESULT)XSLT: Проблема сочетающий в себе элементы из разных узлов в одном XSL: для каждой петли-

<ROW> 
    <COL> 
     <DATA>A</DATA> 
     <DATA>B</DATA> 
     <DATA>C</DATA> 
    </COL> 
    <COL> 
     <DATA>1</DATA> 
     <DATA>2</DATA> 
     <DATA>3</DATA> 
    </COL> 
</ROW> 

в xls.file, где соответствующие элементы DATA помещаются в отдельные ячейки рядом друг с другом.

Используя следующий код

<xsl:for-each select="FMP:COL[1]/FMP:DATA"> 
    <xsl:variable name="p"><xsl:value-of select="position()"/></xsl:variable> 
    <Cell> 
     <Data ss:Type="String"> 
      <xsl:value-of select="."/> 
     </Data> 
    </Cell> 
    <Cell> 
     <Data ss:Type="String"> 
      <xsl:value-of select="../../FMP:COL[2]/FMP:DATA[$p]"/> 
     </Data> 
    </Cell> 
</xsl:for-each> 

возвращает только

А 1

В 1

С 1

вместо

A 1

B 2

C 3

, и я не знаю, почему ...

Любая помощь высоко ценится!

лучший Флориан

ответ

0

Поскольку вы устанавливаете значение $p с помощью <xsl:value-of>, он будет рассматриваться как строковое значение, когда FMP:DATA[$p] оценивается. Поскольку непустая строка является «правдой», всегда будет выбран первый элемент FMP:DATA.

Вместо этого, просто используйте атрибут select, когда вы устанавливаете значение p «s:

<xsl:variable name="p" select="position()" /> 

это заставит его правильно обработать как число.

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