这个节点的XSL计数经文具有相同的名称(动态)节点
问题描述:
我有下面的XML:这个节点的XSL计数经文具有相同的名称(动态)节点
<record>
<fruit>Apples</fruit>
<fruit>Oranges</fruit>
<fruit>Bananas</fruit>
<fruit>Plums</fruit>
<vegetable>Carrots</vegetable>
<vegetable>Peas</vegetable>
<candy>Snickers</candy>
</record>
和下面的XSL:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" version="4.0" encoding="iso-8859-1" indent="yes" />
<xsl:key name="nodes-by-name" match="*" use="name()"/>
<xsl:template match="*">
<table class="fieldGrid" border="0">
<xsl:for-each select="*">
<xsl:if test="not(*)">
<xsl:if test=".!=''''">
<xsl:call-template name="lowestLevel"/>
</xsl:if>
<xsl:if test=".=''''">
<xsl:call-template name="hasChildren"/>
</xsl:if>
</xsl:if>
<xsl:if test="*">
<xsl:call-template name="hasChildren"/>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template name="lowestLevel">
<tr class="fields">
<td class="fieldName">
<xsl:value-of select="translate(local-name(), ''_'', '' '')" />
</td>
<td class="fieldValue">
<xsl:value-of select="translate(., ''_'', '' '')" />
</td>
</tr>
</xsl:template>
<xsl:template name="hasChildren">
<tr>
<td colspan="2" class="sectionTitle">
<xsl:value-of select="translate(local-name(), ''_'', '' '')" /> <xsl:value-of select="count(key(''nodes-by-name'', name()))" />
</td>
</tr>
<tr>
<td>
<xsl:for-each select="*">
<xsl:if test="not(*)">
<xsl:call-template name="lowestLevel"/>
</xsl:if>
<xsl:if test="*">
<xsl:call-template name="hasChildren"/>
</xsl:if>
</xsl:for-each>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
的问题我有是我得到以下输出,其中数字是具有相同名称的节点的总和,而不是该节点与相同名称的其他节点的差别。 (我已经简化了HTML删除类):
<table class="fieldGrid" border="0">
<tr>
<td>fruit 4</td>
<td>Apples</td>
</tr>
<tr>
<td>fruit 4</td>
<td>Oranges</td>
</tr>
<tr>
<td>fruit 4</td>
<td>Bananas</td>
</tr>
<tr>
<td>fruit 4</td>
<td>Plums</td>
</tr>
<tr>
<td>vegetable 2</td>
<td>Carrots</td>
</tr>
<tr>
<td>vegetable 2</td>
<td>Peas</td>
</tr>
<tr>
<td>candy 1</td>
<td>Snickers</td>
<tr>
</table>
我似乎无法弄清楚如何得到正确的选择设定数值为外地的次数数。它需要是动态的,因为记录字段中的节点数可以超过100个,我不想为所有可能的记录手动设置它。我想,结果如下:
<table class="fieldGrid" border="0">
<tr>
<td>fruit 1</td>
<td>Apples</td>
</tr>
<tr>
<td>fruit 2</td>
<td>Oranges</td>
</tr>
<tr>
<td>fruit 3</td>
<td>Bananas</td>
</tr>
<tr>
<td>fruit 4</td>
<td>Plums</td>
</tr>
<tr>
<td>vegetable 1</td>
<td>Carrots</td>
</tr>
<tr>
<td>vegetable 2</td>
<td>Peas</td>
</tr>
<tr>
<td>candy 1</td>
<td>Snickers</td>
<tr>
</table>
谢谢
答
输入:
<record>
<fruit>Apples</fruit>
<fruit>Oranges</fruit>
<fruit>Bananas</fruit>
<fruit>Plums</fruit>
<vegetable>Carrots</vegetable>
<vegetable>Peas</vegetable>
<candy>Snickers</candy>
</record>
XSLT:
<xsl:template match='record'>
<table class='fieldGrid' border='0'>
<xsl:for-each select='*'>
<tr>
<td>
<xsl:value-of select='local-name()'/>
<xsl:text> </xsl:text>
<xsl:number/>
</td>
<td><xsl:value-of select='.'/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
输出:
<table border="0" class="fieldGrid">
<tr>
<td>fruit 1</td>
<td>Apples</td>
</tr>
<tr>
<td>fruit 2</td>
<td>Oranges</td>
</tr>
<tr>
<td>fruit 3</td>
<td>Bananas</td>
</tr>
<tr>
<td>fruit 4</td>
<td>Plums</td>
</tr>
<tr>
<td>vegetable 1</td>
<td>Carrots</td>
</tr>
<tr>
<td>vegetable 2</td>
<td>Peas</td>
</tr>
<tr>
<td>candy 1</td>
<td>Snickers</td>
</tr>
</table>
+0
就是这个'
'的 '产生一个XML文档4.0 =>''这是不正确?。对于HTML 4.01 DTD,您必须使用'doctype-public'和'doctype-system',例如: ' –
Saxoier