以文本方式查看主题

-  W3CHINA.ORG讨论区 - 语义网·描述逻辑·本体·RDF·OWL  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  [求助]xsl:for-each 嵌套循环问题,急  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=58552)


--  作者:yuzhile
--  发布时间:1/27/2008 12:24:00 PM

--  [求助]xsl:for-each 嵌套循环问题,急
我的需求是这样的:从数据库里生成xml文件,然后根据这个文件做成二级树型菜单,操作菜单可以 修改或删除数据库中的信息

这是生成的xml 文件:
-------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<ResultSet>
  <ROW>
    <col_id>1</col_id>
    <col_name>国际新闻</col_name>
    <col_level>0</col_level>
  </ROW>
  <ROW>
    <col_id>2</col_id>
    <col_name>全球焦点</col_name>
    <col_level>1</col_level>
  </ROW>
  <ROW>
    <col_id>3</col_id>
    <col_name>域外风情</col_name>
    <col_level>1</col_level>
  </ROW>
  <ROW>
    <col_id>4</col_id>
    <col_name>一级栏目</col_name>
    <col_level>0</col_level>
  </ROW>
  <ROW>
    <col_id>5</col_id>
    <col_name>二级栏目</col_name>
    <col_level>1</col_level>
  </ROW>
  <ROW>
    <col_id>6</col_id>
    <col_name>二级栏目</col_name>
    <col_level>1</col_level>
  </ROW>
  <ROW>
    <col_id>7</col_id>
    <col_name>大国军事</col_name>
    <col_level>0</col_level>
  </ROW>
  <ROW>
    <col_id>8</col_id>
    <col_name>海外文化</col_name>
    <col_level>1</col_level>
  </ROW>
  <ROW>
    <col_id>9</col_id>
    <col_name>国内新闻</col_name>
    <col_level>0</col_level>
  </ROW>
  <ROW>
    <col_id>10</col_id>
    <col_name>社会政策</col_name>
    <col_level>1</col_level>
  </ROW>
  <ROW>
    <col_id>11</col_id>
    <col_name>财经纵横</col_name>
    <col_level>9</col_level>
  </ROW>
  <ROW>
    <col_id>12</col_id>
    <col_name>考古发现</col_name>
    <col_level>0</col_level>
  </ROW>
  <ROW>
    <col_id>13</col_id>
    <col_name>教育人文</col_name>
    <col_level>0</col_level>
  </ROW>
  <ROW>
    <col_id>14</col_id>
    <col_name>天文地理</col_name>
    <col_level>0</col_level>
  </ROW>
  <ROW>
    <col_id>15</col_id>
    <col_name>星际探索</col_name>
    <col_level>1</col_level>
  </ROW>
  <ROW>
    <col_id>16</col_id>
    <col_name>海底世界</col_name>
    <col_level>0</col_level>
  </ROW>
  <ROW>
    <col_id>17</col_id>
    <col_name>南极北极</col_name>
    <col_level>0</col_level>
  </ROW>
  <ROW>
    <col_id>18</col_id>
    <col_name>大学之道</col_name>
    <col_level>1</col_level>
  </ROW>
  <ROW>
    <col_id>19</col_id>
    <col_name>百姓生活</col_name>
    <col_level>7</col_level>
  </ROW>
  <ROW>
    <col_id>20</col_id>
    <col_name>教学相长</col_name>
    <col_level>13</col_level>
  </ROW>
  <ROW>
    <col_id>21</col_id>
    <col_name>教学相长</col_name>
    <col_level>13</col_level>
  </ROW>
  <ROW>
    <col_id>22</col_id>
    <col_name>职业培训</col_name>
    <col_level>13</col_level>
  </ROW>
  <ROW>
    <col_id>23</col_id>
    <col_name>校园生活</col_name>
    <col_level>13</col_level>
  </ROW>
  <ROW>
    <col_id>24</col_id>
    <col_name>娱乐时代</col_name>
    <col_level>0</col_level>
  </ROW>
</ResultSet>

-----------------------------------------------------------
首先要取出col_level=0的栏目,作为一级栏目,然后根据一级栏目的col_id, 找出col_level=col_id的栏目作为二级栏目,这需要嵌套循环。我的xsl文件是这样写的:

<xsl:for-each select="ResultSet/ROW">
<xsl:variable name="id" select="current()/col_id"/>
 <xsl:if test="col_level = 0">
  
   <tr>
    <td><xsl:value-of select="$id"/></td> 
    <td><xsl:value-of select="col_name"/></td>
    <td><xsl:value-of select="col_level"/></td>
<xsl:for-each select="ResultSet/ROW">
   <xsl:if test="col_level = $id">

<td>
                                                                      
   <tr>
    <td><xsl:value-of select="col_id"/></td> 
    <td><xsl:value-of select="col_name"/></td>
    <td><xsl:value-of select="col_level"/></td>
   </tr>
   

    </td>
                             </xsl:if>
   </xsl:for-each>
   </tr>
</xsl:if>
</xsl:for-each>

-----------------------------------------------------
显示的结果是这样的

1 国际新闻 0
4 一级栏目 0
7 大国军事 0
9 国内新闻 0
12 考古发现 0
13 教育人文 0
14 天文地理 0
16 海底世界 0
17 南极北极 0
24 娱乐时代 0

好像内层循环根本没有运行

我对xml/xslt语法不熟悉,从网上找了一些资料,临时突击学习,请高手指点


--  作者:enyaxp
--  发布时间:1/27/2008 5:40:00 PM

--  

<xsl:for-each select="ResultSet/ROW">
<xsl:variable name="id" select="current()/col_id"/>
<xsl:if test="col_level = 0">
  
   <tr>
    <td><xsl:value-of select="$id"/></td>
    <td><xsl:value-of select="col_name"/></td>
    <td><xsl:value-of select="col_level"/></td>
<xsl:for-each select="//ROW">  // 这里改一下
   <xsl:if test="col_level = $id">

<td>
                                                                      
   <tr>
    <td><xsl:value-of select="col_id"/></td>
    <td><xsl:value-of select="col_name"/></td>
    <td><xsl:value-of select="col_level"/></td>
   </tr>
   

    </td>
                             </xsl:if>
   </xsl:for-each>
   </tr>
</xsl:if>
</xsl:for-each>



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms