xml到html使用xsl repeat

时间:2017-11-02 16:11:49

标签: html xslt repeat

我遇到了问题,我有一个xml文件(page.xml),但需要HTML格式的表格

 <?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="page.xsl"?>

<AAAAA>

<ITEM>
<MANYTIMES>3</MANYTIMES>
<ID>010101</ID>
<NAME>name of item 1</NAME>
</ITEM>

<ITEM>
<MANYTIMES>5</MANYTIMES>
<ID>020202</ID>
<NAME>nme of item 2</NAME>
</ITEM>

</AAAAA>

我有xsl文件(page.xsl):

<?xml version="1.0" encoding="Windows-1250"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html"/> 

<xsl:template match="/">
<html><body>
<xsl:apply-templates/>
</body></html>
</xsl:template>

<xsl:template match="/AAAAA/ITEM">
<xsl:variable name="howmanytimes"><xsl:value-of select="MANYTIMES"/></xsl:variable>

<div style='color:red'>View this <xsl:value-of select="$howmanytimes"/> many times:</div>

<TABLE>
<TR>
<TD style="border:solid windowtext 0.5pt;color:green"> <xsl:value-of select="ID"/> </TD>
<TD style="border:solid windowtext 0.5pt;color:blue"> <xsl:value-of select="NAME"/> </TD>
</TR>
</TABLE>

</xsl:template>
</xsl:styleshee

没关系,但每个表都应该重复MANYTIMES

2 个答案:

答案 0 :(得分:0)

在XSLT 2.0中,您可以

<xsl:variable name="here" select="."/>
<xsl:for-each select="1 to $howManyTimes">
   ...
</xsl:for-each>

你想在循环中使用$ here变量,因为循环中的上下文项是整数,而不是节点。

在XSLT 1.0中没有等效的东西,但如果源文档包含足够的节点,则有一个解决方法:

<xsl:variable name="here" select="."/>
<xsl:for-each select="//node()[position() &lt;= $howManyTimes]">
   ...
</xsl:for-each>

答案 1 :(得分:0)

我更改的文件page.xsl:

<?xml version="1.0" encoding="Windows-1250"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html"/> 

<xsl:template match="/">
<html><body>
<xsl:apply-templates/>
</body></html>
</xsl:template>

<xsl:template match="/AAAAA/ITEM">
<xsl:variable name="howManyTimes"><xsl:value-of select="MANYTIMES"/></xsl:variable>

<div style='color:red'>View this <xsl:value-of select="$howManyTimes"/> many times:</div>


<!-- 
<TABLE>
<TR>
<TD style="border:solid windowtext 0.5pt;color:green"> <xsl:value-of select="ID"/> </TD>
<TD style="border:solid windowtext 0.5pt;color:blue"> <xsl:value-of select="NAME"/> </TD>
</TR>
</TABLE>
-->

<xsl:for-each select="1 to $howManyTimes">
    <div> my text </div>
</xsl:for-each>

</xsl:template>
</xsl:stylesheet>

我将如何使用for-each循环?