То, что вы делаете, это неправильно для того, чего вы хотите достичь:
<xsl:for-each select="*[name()='PartInformation']">
<table bgcolor="#99ff66"><th>Part Information:</th></table>
<table bgcolor="#99ff66"><th><xsl:value-of select="@Value"/></th></table>
<tr>
<xsl:for-each select="*/*[name()='InspPrgInformation']">
<table bgcolor="#33ccff"><th>Inspection Program ID:</th></table>
<table bgcolor="#33ccff"><th><xsl:value-of select="@Value"/></th></table>
<table bgcolor="#33ccff"><th><xsl:value-of select="@NoOfTracefields"/></th></table>
</xsl:for-each>
</tr>
</xsl:for-each>
Второе для каждого отнюдь не связано с первым. То же самое касается вашего третьего для каждого.
Не current()
даст вам текущий итерированный узел.
Вы можете переписать свои первые два для каждого, как это:
<tr>
<xsl:for-each select="*[name()='PartInformation']">
<tr>
<xsl:for-each select="current()/*/InspPrgInformation">
<table bgcolor="#33ccff">
<th>Inspection Program ID:</th>
</table>
<table bgcolor="#33ccff">
<th>
<xsl:value-of select="@Value"/>
</th>
</table>
<table bgcolor="#33ccff">
<th>
<xsl:value-of select="@NoOfTracefields"/>
</th>
</table>
</xsl:for-each>
</tr>
</xsl:for-each>
</tr>
Третий можно использовать с вашим текущим дизайном. Поскольку current()
является локальным для каждого для каждого, поэтому ваш третий для каждого не имеет представления о двух других. Кроме того, кажется, что ваш дизайн использует xslt в качестве языка программирования, который не подходит.
Наконец, в следующий раз попробуйте предоставить несколько полных / скомпилированных примеров, а также целевой документ.