я следующие XML-структуры:XSLT, создать заголовок таблицы и строки
<Tab4>
<T4Head1>First Table header 1</T4Head1>
<T4Head2>First Table header 2</T4Head2>
<T4Head3>First Table header 3</T4Head3>
<T4Head4>First Table header 4</T4Head4>
</Tab4>
<Tab4>
<T4Col1>First Table row 1 column 1</T4Col1>
<T4Col2>First Table row 1 column 2</T4Col2>
<T4Col3>First Table row 1 column 3</T4Col3>
<T4Col4>First Table row 1 column 4</T4Col4>
</Tab4>
another element than Tab4 might occur here...
<Tab4>
<T4Head1>Second Table header 1</T4Head1>
<T4Head2>Second Table header 2</T4Head2>
<T4Head3>Second Table header 3</T4Head3>
<T4Head4>Second Table header 4</T4Head4>
</Tab4>
<Tab4>
<T4Col1>Second Table row 1 column 1</T4Col1>
<T4Col2>Second Table row 1 column 2</T4Col2>
<T4Col3>Second Table row 1 column 3</T4Col3>
<T4Col4>Second Table row 1 column 4</T4Col4>
</Tab4>
<Tab4>
<T4Col1>Second Table row 2 column 1</T4Col1>
<T4Col2>Second Table row 2 column 2</T4Col2>
<T4Col3>Second Table row 2 column 3</T4Col3>
<T4Col4>Second Table row 2 column 4</T4Col4>
</Tab4>
<Tab4>
<T4Col1>Second Table row 3 column 1</T4Col1>
<T4Col2>Second Table row 3 column 2</T4Col2>
<T4Col3>Second Table row 3 column 3</T4Col3>
<T4Col4>Second Table row 3 column 4</T4Col4>
</Tab4>
another element than Tab4 might occur here...
С XSLT 1.0 Мне нужно выводить HTML, глядя, как показано ниже. Другими словами, мне нужно, чтобы каждый блок Tab4, содержащий T4Col1, T4Col2 и т. Д., Повторялся до появления следующего типа элемента (не являясь Tab4/T4Col1).
<tr>
<td>
<table class="specTab" border="1">
<tbody>
<tr>
<th>
Table header 1
</th>
<th>
Table header 2
</th>
<th>
Table header 3
</th>
<th>
Table header 4
</th>
</tr>
<!-- this part should repeat -->
<tr>
<td>
Table column 1
</td>
<td>
Table column 2
</td>
<td>
Table column 3
</td>
<td>
Table column 4
</td>
</tr>
<!-- this part should repeat -->
</tbody>
</table>
</td>
</tr>
У меня было несколько попыток, но я не могу его схватить. Мой текущий код XSLT выглядит следующим образом:
<xsl:for-each select="./node()">
<xsl:choose>
<!-- Multiple other test scenarios -->
<xsl:when test="name()='Rub1' and . !=''">
</xsl:when>
<xsl:when test="name()='Tab4' and ./T4Head1">
<tr>
<td>
<table class="specTab" border="1">
<tbody>
<tr>
<th>
<xsl:value-of select="./T4Head1"/>
</th>
<th>
<xsl:value-of select="./T4Head2"/>
</th>
<th>
<xsl:value-of select="./T4Head3"/>
</th>
<th>
<xsl:value-of select="./T4Head4"/>
</th>
</tr>
<xsl:for-each select="following-sibling::node()/T4Col1">
<tr>
<td>
<xsl:value-of select="."/>
</td>
<td>
<xsl:value-of select="."/>
</td>
<td>
<xsl:value-of select="."/>
</td>
<td>
<xsl:value-of select="."/>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</td>
</tr>
</xsl:when>
<xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
Проблема с указанным кодом является то, что он выводит все tab4/T4Col1 (1 + 3), даже те, которые после появления следующего заголовка. В некоторой степени мне нужно сгруппировать заголовок и все строки/столбцы, так как я хочу, чтобы они находились в одной и той же HTML-таблице.
Благодарен за любую помощь, которую я могу получить.
Большое спасибо! Это сэкономило мой день и много головной боли :) – hico