Xml XSLT如何输出<;tr></tr>;每3次迭代标记一次
我有以下XML,我正在尝试将它分成3个Xml XSLT如何输出<;tr></tr>;每3次迭代标记一次,xml,xslt,Xml,Xslt,我有以下XML,我正在尝试将它分成3个元素和1个元素: <tags> <tag> <title>Title1</title> <img>src1</img> <text>text text text</text> </tag> <tag> <title>Title2</ti
元素和1个
元素:
<tags>
<tag>
<title>Title1</title>
<img>src1</img>
<text>text text text</text>
</tag>
<tag>
<title>Title2</title>
<img>src2</img>
<text>text text text</text>
</tag>
<tag>
<title>Title3</title>
<img>src3</img>
<text>text text text</text>
</tag>
<tag>
<title>Title4</title>
<img>src4</img>
<text>text text text</text>
</tag>
...
</tags>
标题1
文本文本文本
标题2
文本文本文本
标题3
文本文本文本
标题4
文本文本文本
...
我想要以下输出:
<tr>
<td><h2>Title1</h2> <img src='src1'> <p>text text text</p></td>
<td><h2>Title2</h2> <img src='src2'> <p>text text text</p></td>
<td><h2>Title3</h2> <img src='src3'> <p>text text text</p></td>
</tr>
<tr>
<td><h2>Title4</h2> <img src='src4'> <p>text text text</p></td>
...
</tr>
...
标题1text
标题2text
标题3text
标题4正文
...
...
我试着做:
<div class='some-class'>
<table>
<xsl:if test="position() mod 3 = 0">
<tr>
</xsl:if>
<xsl:for-each select="/Tags/Tag" >
<td>
<h2><xsl:value-of select="title" /></h2>
<img src="{src}" />
<p><xsl:value-of select="text" /></p>
</td>
</xsl:for-each>
<xsl:if test="position() mod 3 = 0">
</tr>
</xsl:if>
</table>
</div>
并且该表必须位于现有的
元素中。是否这样尝试
XSLT1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:template match="/tags">
<div class='some-class'>
<table border="1">
<xsl:for-each select="tag[position() mod 3 = 1]">
<tr>
<xsl:apply-templates select=". | following-sibling::tag[position() < 3]"/>
</tr>
</xsl:for-each>
</table>
</div>
</xsl:template>
<xsl:template match="tag">
<td>
<h2>
<xsl:value-of select="title" />
</h2>
<img src="{img}" />
<p>
<xsl:value-of select="text" />
</p>
</td>
</xsl:template>
</xsl:stylesheet>
您应该发布一个至少有4个标记的示例,以使其有用。“并且该表必须位于现有元素中。”您不清楚“现有”是什么意思。我编辑了我的答案,添加了一个新元素;如果这不是您的意思,请再次编辑您的问题,并添加您期望的确切代码作为转换的输出。@michael.hor257k我的意思是我已经有了一个xsl:stylesheet和一堆其他东西。在我的页面中间的某个地方,我需要渲染一个表,这样它将包含3个元素在每个元素中。但是,当我使用您的代码并将其粘贴到现有代码中时,我会遇到以下错误:“'xsl:template'不能是'div'元素的子元素。”恐怕我无法帮助您处理我看不见的代码。确实,模板必须是样式表的顶级元素。@michael.hor257k我不能在这里发布所有代码,因为它太大了:)那么有没有办法将代码放在最上面(类似于)然后在需要的地方调用它?它给了我“'xsl:template'不能是'div'元素的子元素。”我如何在外部创建这些模板,并在代码中应用它们?@N0ir我发布了一个完整的样式表,它不会产生这个(或任何其他)错误。如果你想要其他东西,你需要编辑你的问题并解释它是什么。请审查: