Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT如何输出<;tr></tr>;每3次迭代标记一次_Xml_Xslt - Fatal编程技术网

Xml XSLT如何输出<;tr></tr>;每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

我有以下XML,我正在尝试将它分成3个
元素和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() &lt; 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我发布了一个完整的样式表,它不会产生这个(或任何其他)错误。如果你想要其他东西,你需要编辑你的问题并解释它是什么。请审查: