使用xslt对未分组的xml标记执行foreach循环
按照我的要求,我不能把它们分组。请帮我找到解决办法 注意:xslt 1.0 XML使用xslt对未分组的xml标记执行foreach循环,xml,xslt,Xml,Xslt,按照我的要求,我不能把它们分组。请帮我找到解决办法 注意:xslt 1.0 XML <item_title>item1</item_title> <item_title>item2</item_title> <item_title>item3</item_title> <item_description>description1</item_description> <item_descrip
<item_title>item1</item_title>
<item_title>item2</item_title>
<item_title>item3</item_title>
<item_description>description1</item_description>
<item_description>description2</item_description>
<item_description>description3</item_description>
item1
项目2
项目3
说明1
说明2
说明3
需要的输出:
<div class="item">
<div class="item_title">item1</div>
<div class="item_content">description1</div>
</div>
<div class="item">
<div class="item_title">item2</div>
<div class="item_content">description2</div>
</div>
<div class="item">
<div class="item_title">item3</div>
<div class="item_content">description3</div>
</div>
<xsl:for-each select="item_title">
<div class="item">
<div class="item_title">
<xsl:value-of select="item_title[position()]"/>
</div>
<div class="item_content">
<xsl:value-of select="item_description[position()]"/>
</div>
</div>
</xsl:for-each>
<xsl:call-template name="iterative">
<xsl:with-param name="num" select="1" />
<xsl:with-param name="count" select="count(item_title)" />
</xsl:call-template>
<xsl:template name="iterative">
<xsl:param name="num" />
<xsl:param name="count" />
<xsl:if test="not($num = $count+1)">
<div class="item">
<div class="item_title">
<span class="icon_plus">+</span>
<span class="icon_minus">–</span>
<xsl:value-of select="item_title[$num]"/>
</div>
<div class="item_content">
<xsl:value-of select="item_description[$num]"/>
</div>
</div>
<xsl:call-template name="iterative">
<xsl:with-param name="num" select="$num + 1" />
<xsl:with-param name="count" select="$count" />
</xsl:call-template>
</xsl:if>
项目1
说明1
项目2
说明2
项目3
说明3
我的尝试:
<div class="item">
<div class="item_title">item1</div>
<div class="item_content">description1</div>
</div>
<div class="item">
<div class="item_title">item2</div>
<div class="item_content">description2</div>
</div>
<div class="item">
<div class="item_title">item3</div>
<div class="item_content">description3</div>
</div>
<xsl:for-each select="item_title">
<div class="item">
<div class="item_title">
<xsl:value-of select="item_title[position()]"/>
</div>
<div class="item_content">
<xsl:value-of select="item_description[position()]"/>
</div>
</div>
</xsl:for-each>
<xsl:call-template name="iterative">
<xsl:with-param name="num" select="1" />
<xsl:with-param name="count" select="count(item_title)" />
</xsl:call-template>
<xsl:template name="iterative">
<xsl:param name="num" />
<xsl:param name="count" />
<xsl:if test="not($num = $count+1)">
<div class="item">
<div class="item_title">
<span class="icon_plus">+</span>
<span class="icon_minus">–</span>
<xsl:value-of select="item_title[$num]"/>
</div>
<div class="item_content">
<xsl:value-of select="item_description[$num]"/>
</div>
</div>
<xsl:call-template name="iterative">
<xsl:with-param name="num" select="$num + 1" />
<xsl:with-param name="count" select="$count" />
</xsl:call-template>
</xsl:if>
我找到了我自己的方法,根据我的要求,我找到了更好的方法: 调用迭代函数:
<div class="item">
<div class="item_title">item1</div>
<div class="item_content">description1</div>
</div>
<div class="item">
<div class="item_title">item2</div>
<div class="item_content">description2</div>
</div>
<div class="item">
<div class="item_title">item3</div>
<div class="item_content">description3</div>
</div>
<xsl:for-each select="item_title">
<div class="item">
<div class="item_title">
<xsl:value-of select="item_title[position()]"/>
</div>
<div class="item_content">
<xsl:value-of select="item_description[position()]"/>
</div>
</div>
</xsl:for-each>
<xsl:call-template name="iterative">
<xsl:with-param name="num" select="1" />
<xsl:with-param name="count" select="count(item_title)" />
</xsl:call-template>
<xsl:template name="iterative">
<xsl:param name="num" />
<xsl:param name="count" />
<xsl:if test="not($num = $count+1)">
<div class="item">
<div class="item_title">
<span class="icon_plus">+</span>
<span class="icon_minus">–</span>
<xsl:value-of select="item_title[$num]"/>
</div>
<div class="item_content">
<xsl:value-of select="item_description[$num]"/>
</div>
</div>
<xsl:call-template name="iterative">
<xsl:with-param name="num" select="$num + 1" />
<xsl:with-param name="count" select="$count" />
</xsl:call-template>
</xsl:if>
声明模板:
<div class="item">
<div class="item_title">item1</div>
<div class="item_content">description1</div>
</div>
<div class="item">
<div class="item_title">item2</div>
<div class="item_content">description2</div>
</div>
<div class="item">
<div class="item_title">item3</div>
<div class="item_content">description3</div>
</div>
<xsl:for-each select="item_title">
<div class="item">
<div class="item_title">
<xsl:value-of select="item_title[position()]"/>
</div>
<div class="item_content">
<xsl:value-of select="item_description[position()]"/>
</div>
</div>
</xsl:for-each>
<xsl:call-template name="iterative">
<xsl:with-param name="num" select="1" />
<xsl:with-param name="count" select="count(item_title)" />
</xsl:call-template>
<xsl:template name="iterative">
<xsl:param name="num" />
<xsl:param name="count" />
<xsl:if test="not($num = $count+1)">
<div class="item">
<div class="item_title">
<span class="icon_plus">+</span>
<span class="icon_minus">–</span>
<xsl:value-of select="item_title[$num]"/>
</div>
<div class="item_content">
<xsl:value-of select="item_description[$num]"/>
</div>
</div>
<xsl:call-template name="iterative">
<xsl:with-param name="num" select="$num + 1" />
<xsl:with-param name="count" select="$count" />
</xsl:call-template>
</xsl:if>
+
–
我的输出是html,而不是xmlHTML。html可以被认为是XML的一个子集。您可以在XML中使用任何HTML标记。您不能在这样的谓词中使用
position()
;它失去了上下文。首先把它放到一个变量中,然后使用这个变量。我找到了一个更好的方法,并把它作为答案发布了。我的意思是,关于分组的其他问题的引用与这里的问题无关。