Новичок в xslt, так что полегче, я пытаюсь преобразовать xml в html через xslt, и, похоже, у меня не получается.
Заголовки и строки не должны быть жестко закодированы и должны быть как можно более общими.
Желаемый результат:
Используется Xml, над которым я не контролирую
<?xml version="1.0" encoding="utf-8"?>
<Generated>
<Employees>
<Employee name="Joe Bloggs">
<Sales>
<Sale key="Sale-Id" value="333" />
<Sale key="Sale-Field1" value="a" />
<Sale key="Sale-Field2" value="b" />
</Sales>
</Employee>
<Employee name="Mark Bloggs">
<Sales>
<Sale key="Sale-Id" value="334" />
<Sale key="Sale-Field1" value="c" />
<Sale key="Sale-Field2" value="d" />
</Sales>
</Employee>
</Employees>
</Generated>
XSLT Моя попытка
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="4" encoding="UTF-8" indent="no" omit-xml-declaration="yes"/>
<!-- main body -->
<xsl:template match="/">
<html>
<body>
<h3>Employees</h3>
<table border="1">
<tr bgcolor="blue">
<!--Header only so select first row to get headers-->
<xsl:for-each select="(Generated/Employees/Employee)[1]/Sales/Sale">
<th>
<xsl:value-of select="@key"/>
</th>
</xsl:for-each>
</tr>
<!--Get all the other rows-->
<xsl:for-each select="(Generated/Employees/Employee)/Sales/Sale">
<tr>
<td>
<xsl:value-of select="@value"/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Мой неправильный результат
Любое предложение, как исправить это и получить желаемый результат, как показано на изображении выше.
Большое спасибо
for-each
- подробности см. В моем ответе. 03.01.2015