Я использовал сопоставление с шаблоном, чтобы извлечь мои элементы и отобразить их в виде таблицы HTML.Однако у меня возникают проблемы с моим текущим выводом, так как количество дочерних элементов не равно.
В приведенном ниже XML у второго родителя больше дочерних элементов, чем у первого.Если я преобразую его в таблицу HTML, как я могу сделать строку 4 столбца 1 пустой?
Я намереваюсь сначала поместить все элементы в <cells>
, затем оттуда я преобразую его в таблицу, используя мюнхенскую группировку (отдельный код из XSLT ниже).
XML:
<?xml version="1.0" encoding="utf-8" ?>
<Table>
<Parent>
<Head>Header 1</Head>
<Children>
<Node>Node 1</Node>
<Node>Node 2</Node>
<Node>Node 3</Node>
</Children>
</Parent>
<Parent>
<Head>Header 2</Head>
<Children>
<Node>Node 4</Node>
<Node>Node 5</Node>
<Node>Node 6</Node>
<Node>Node 7</Node>
</Children>
</Parent>
</Table>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="Table">
<cells>
<xsl:apply-templates select="Parent[1]" mode="parent">
<xsl:with-param name="row" select="1"/>
<xsl:with-param name="col" select="1"/>
</xsl:apply-templates>
</cells>
</xsl:template>
<xsl:template match="Parent" mode="parent">
<xsl:param name="row"/>
<xsl:param name="col"/>
<xsl:apply-templates select="Children/Node[1]" mode="child">
<xsl:with-param name="row" select="$row"/>
<xsl:with-param name="col" select="$col"/>
</xsl:apply-templates>
<xsl:apply-templates select="following-sibling::*[1]" mode="parent">
<xsl:with-param name="row" select="$row"/>
<xsl:with-param name="col" select="$col + 1"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Node" mode="child">
<xsl:param name="row"/>
<xsl:param name="col"/>
<cell row="{$row}" col="{$col}">
<xsl:value-of select="."/>
</cell>
<xsl:apply-templates select="following-sibling::*[1]" mode="child">
<xsl:with-param name="row" select="$row + 1"/>
<xsl:with-param name="col" select="$col"/>
</xsl:apply-templates>
</xsl:template>
</xsl:stylesheet>
Ожидаемый результат (ячейки):
<cells>
<cell row="1" col="1">Node 1</cell>
<cell row="2" col="1">Node 2</cell>
<cell row="3" col="1">Node 3</cell>
<cell row="4" col="1"> </cell>
<cell row="1" col="2">Node 4</cell>
<cell row="2" col="2">Node 5</cell>
<cell row="3" col="2">Node 6</cell>
<cell row="4" col="2">Node 7</cell>
</cells>
Ожидаемая таблица HTML:
<table border="1">
<tr>
<td>Node 1</td>
<td>Node 4</td>
</tr>
<tr>
<td>Node 2</td>
<td>Node 5</td>
</tr>
<tr>
<td>Node 3</td>
<td>Node 6</td>
</tr>
<tr>
<td> </td>
<td>Node 7</td>
</tr>
</table>