【发布时间】:2020-09-26 11:33:59
【问题描述】:
这块HTML表格
<tr>
<td>
<p>only one cell without break</p>
</td>
<td colspan="3">
<p>text 1</p>
<p>text 2</p>
<p>text 3</p>
</td>
<td colspan="3">
<list>
<list-item>
<p>list item 1</p>
</list-item>
<list-item>
<p>list item 2</p>
</list-item>
<list-item>
<p>list item 3</p>
</list-item>
</list>
</td>
</tr>
必须翻译成:
<tr>
<td>
only one cell without break
</td>
<td colspan="3">
text 1<break/>
text 2<break/>
text 3
</td>
<td colspan="3">
<list>
<list-item>
<p>list item 1</p>
</list-item>
<list-item>
<p>list item 2</p>
</list-item>
<list-item>
<p>list item 3</p>
</list-item>
</list>
</td>
</tr>
我正在使用这段 XSLT 代码:
<xsl:template match="td">
<td>
<xsl:for-each select="p">
<xsl:apply-templates/>
<xsl:if test="position() != last()">
<break/>
</xsl:if>
</xsl:for-each>
<xsl:apply-templates select="* except p"/>
</td>
</xsl:template>
我必须选择<td> 作为父节点,这样我就可以用<break/> 标记更改一个单元格内的所有<p> 标记,用于除最后一个之外的所有元素,其中一个单元格内有多个<p> .如果单元格内只有一个<p>,则<p> 标签也必须删除,但<break/> 不需要添加。所有其他标签(即列表)保持不变。它有效,但我失去了这段代码的“colspan”属性。
出于明显的原因(手动设置<td>)属性 colspan 没有从父级复制。
是否有可能以某种方式“修复”代码并将具有所有属性的父 <td> 元素复制到输出表?
【问题讨论】:
-
“我也必须使用 for-each 循环”是一些家庭作业要求吗?或者是什么让你相信你需要使用 for-each?从长远来看,使用应用模板和模板匹配编写推送样式代码可以轻松完成工作。
-
我更新了代码,因此它反映了为什么在这种情况下必须使用 for-each(在我看来)的真正问题。如果有其他方法,我会很高兴。
标签: xslt