В моем приложении я получаю таблицу XML с переменным числом столбцов, которые я хочу преобразовать с помощью XSLT. Таблица имеет следующую структуру:
Я попытался преобразовать ее с помощью следующего XSLT
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:Informe xmlns:ns2="http://whateverUrl/" idOperacion="123456">
<Resultset identificador="0" nombre="Nombre" numResult="1">
<Header>
<Columna tipo="VARCHAR">ColName1</Columna>
<Columna tipo="VARCHAR">ColName2</Columna>
<Columna tipo="VARCHAR">ColName3</Columna>
<Columna tipo="VARCHAR">ColName4</Columna>
<Columna tipo="VARCHAR">ColName5</Columna>
<Columna tipo="VARCHAR">ColName6</Columna>
</Header>
<DataSet>
<Fila>
<Campo>Val1</Campo>
<Campo>Val2</Campo>
<Campo>Val3</Campo>
<Campo>Val4</Campo>
<Campo>Val5</Campo>
<Campo>Val6</Campo>
</Fila>
</DataSet>
</Resultset>
</ns2:Informe>
</S:Body>
</S:Envelope>
Я попытался преобразовать его с помощью следующего XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="S:Envelope/S:Body/ns2:Informe/">
<html>
<body>
<h2>My Title</h2>
<table border="1">
<thead>
<xsl:for-each select="/Resultset/Header/Columna">
<tr>
<th><xsl:value-of select="name()"/></th>
</tr>
</xsl:for-each>
</thead>
<tbody>
<xsl:for-each select="/Resultset/DataSet/Fila">
<tr>
<td><xsl:value-of select="name()"/></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Проблемы, которые я обнаружил в моем подходе к преобразованию: - template match
не входит в указанные элементы XML. - Значение <td><xsl:value-of select="name()"/></td>
в других сделанных мною испытаниях напечатало «Columna» вместо значения внутри элемента Column.
Поэтому мой вопрос: что я делаю неправильно, что непозвольте мне преобразовать эту входную XML-таблицу NXM с этим XSLT с учетом выявленных (и нерешенных) ошибок в моем подходе?