У вас неверное правило сопоставления xsl:for-each
.
Используйте следующий шаблон: он соответствует корневому элементу <Persons>
, создает элементы <html>
и <body>
и <table>
.
Наконец, он перебирает элементы <Person>
с xsl:for-each
. Это работает, потому что контекстный узел является правильным (Person
является дочерним для Persons
).
Ситуация Capris
разрешается путем итерации по всем элементам Capris
и создания <td>
длякаждый настоящий элемент. Вы можете увидеть это, посмотрев на границы элементов.
Осталось исправить только один элемент xsl:sort
. Он пытается отсортировать по значению элемента <Persib>
, которого нет в примере. Я думаю, что вы можете исправить это самостоятельно.
<xsl:template match="/Persons">
<html>
<body>
<table border="1">
<tr bgcolor="yellow">
<td><b>Shirts</b></td>
<td><b>Shorts</b></td>
<td><b>Capris</b></td>
<td><b>Capris</b></td>
<td><b>Capris</b></td>
</tr>
<xsl:for-each select="Person">
<xsl:sort select="Persib" />
<tr style="font-size: 10pt; font-family: verdana">
<td>
<xsl:value-of select="Shirts"/>
</td>
<td>
<xsl:value-of select="Pants/Jeans/Shorts"/>
</td>
<xsl:for-each select="Pants/Jeans/Capris">
<td>
<xsl:value-of select="." />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
Вывод должен быть по желанию.