所以,我需要使用xslt 1.0創建一個動態表。我看過幾篇文章/帖子,但似乎無法將它們放在一起。在很多情況下,會有幾個表格單元格爲空數據。在其他情況下,會有多個值需要並置到一個單元格中。下面是示例XML:創建一個表(帶有XSLT 1.0和連接多個值)
<Document>
<Records>
<User>
<Name>User1</Name>
<list xid="data.set">
<Data>
<Column>2</Column>
<Type>Carbs</Type>
<RowValue>Oatmeal</RowValue>
</Data>
<Data>
<Column>1</Column>
<Type>Protein</Type>
<RowValue>sausage</RowValue>
<RowValue>eggs</RowValue>
<RowValue>turkey</RowValue>
</Data>
</list>
</User>
<User>
<Name>User2</Name>
<list xid="data.set">
<Data>
<Type>Vegetables</Type>
<Column>8</Column>
<RowValue>Squash</RowValue>
</Data>
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>cake</RowValue>
<RowValue>cookies</RowValue>
</Data>
<Data>
<Column>5</Column>
<Type>Other</Type>
</Data>
<Data>
<Column>6</Column>
<Type>Beverage</Type>
<RowValue>grape juice</RowValue>
</Data>
</list>
</User>
<User>
<Name>User4</Name>
<list xid="data.set">
<Data>
<Column>7</Column>
<Type>Fats</Type>
<RowValue>cashews</RowValue>
</Data>
<Data>
<Column>8</Column>
<Type>Vegetables</Type>
<RowValue>Green Beans</RowValue>
</Data>
<Data>
<Column>2</Column>
<Type>Carbs</Type>
<RowValue>Brown Rice</RowValue>
</Data>
</list>
</User>
<User>
<Name>User5</Name>
<list xid="data.set">
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>gummy worms</RowValue>
</Data>
<Data>
<Column>4</Column>
<Type>Fruit</Type>
<RowValue>apples</RowValue>
</Data>
</list>
</User>
<User>
<Name>User5</Name>
<list xid="data.set">
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>gummy worms</RowValue>
</Data>
<Data>
<Column>4</Column>
<Type>Fruit</Type>
<RowValue>grapes</RowValue>
</Data>
</list>
</User>
<User>
<Name>User5</Name>
<list xid="data.set">
<Data>
<Column>3</Column>
<Type>Sweets</Type>
<RowValue>gummy worms</RowValue>
</Data>
<Data>
<Column>4</Column>
<Type>Fruit</Type>
<RowValue>grapes</RowValue>
</Data>
</list>
</User>
</Records>
</Document>
編輯:在HTML輸出有重複的值在表格單元中時的用戶名存在不止一次(見下文)。我想刪除每個單元格中存在的重複值,例如「膠粘蠕蟲,膠粘蠕蟲,膠粘蠕蟲」。例如,列出了三個「用戶5」。我想保留包含「user5」的每一行,但刪除那些行的每個單元格中的重複值。
<table border="1">
<thead>
<tr>
<th>
</th>
<th>Protein</th>
<th>Carbs</th>
<th>Sweets</th>
<th>Fruit</th>
<th>Other</th>
<th>Beverage</th>
<th>Fats</th>
<th>Vegetables</th>
</tr>
<tr>
<th></th>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
</tr></thead><tbody><tr><th>User1</th>
<td>sausage, eggs, turkey</td>
<td>Oatmeal</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr><th>User2</th>
<td></td>
<td></td>
<td>cake, cookies</td>
<td></td>
<td></td>
<td>grape juice</td>
<td></td>
<td>Squash</td>
</tr>
<tr><th>User4</th>
<td></td>
<td>Brown Rice</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>cashews</td>
<td>Green Beans</td>
</tr>
<tr><th>User5</th>
<td></td>
<td></td>
<td>gummy worms, gummy worms, gummy worms</td>
<td>apples, grapes, grapes</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr><th>User5</th>
<td></td>
<td></td>
<td>gummy worms, gummy worms, gummy worms</td>
<td>apples, grapes, grapes</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr><th>User5</th>
<td></td>
<td></td>
<td>gummy worms, gummy worms, gummy worms</td>
<td>apples, grapes, grapes</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
這是我非常微弱的努力,試圖使這項工作。我是個新手,溫柔的請...
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:key name="food-by-Category" match="Data" use="Column" />
<xsl:key name="food-by-Value" match="Columns" use="RowValue" />
<xsl:template match="/Document/Records/User/list[@xid = 'data.set']">
<table><tr>
<xsl:for-each select="Data[count(. | key('food-by-Category', Column)[1]) = 1]">
<!-- Sort by the Category -->
<xsl:sort select="Column" />
<td>
<xsl:value-of select="Type" />
</td>
</xsl:for-each>
</tr>
<xsl:for-each select="Data[count(. | key('food-by-Category', Column)[1]) = 1]">
<tr>
<xsl:for-each select="key('food-by-Category', Column)">
<!-- Sort by the item Value -->
<xsl:sort select="RowValue" />
<td>
<xsl:value-of select="RowValue" />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
正如你可以看到它不是分組表頭/細胞一起或在有多個< RowValue串接值>。
這工作得很好。我遇到的唯一問題是當文檔中存在&或任何其他html實體時,它會中斷。我嘗試在第44行放置,,但它似乎不起作用。如何解決這個問題? –
user3303297
@ user3303297無法重現問題。你爲什麼不發表一個關於這個問題的新問題,最好與其他問題隔離? –
謝謝。我明白了這一點,但我想知道你能否幫我解決最後一個問題。看起來,當有一個用戶名稱相同時,每個用戶的值都會被複制。如果用戶名不止一次存在,那很好,但我不希望不止一次爲該用戶複製數據。即膠狀蠕蟲,膠粘蠕蟲,膠粘蠕蟲。膠粘的蠕蟲應該只出現一次。 – user3303297