以文本方式查看主题

-  计算机科学论坛  (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=22362)


--  作者:liziqing
--  发布时间:9/20/2005 11:59:00 AM

--  [求助]xsl:for-each的嵌套问题
有如下xml:

<root>
    <aaa>
      <bbb>
        <ccc></ccc>
        <ccc></ccc>
        <ccc></ccc>
        <ccc></ccc>
      </bbb>
    </aaa>

    <aaa>
      <bbb>
        <ccc></ccc>
        <ccc></ccc>
        <ccc></ccc>
        <ccc></ccc>
        <ccc></ccc>
        <ccc></ccc>
        <ccc></ccc>
      </bbb>
    </aaa>

    <aaa>
      <bbb>
        <ccc></ccc>
        <ccc></ccc>
        <ccc></ccc>
      </bbb>
    </aaaa>

</root>

其中<bbb>下的<ccc>数量不定

我要构建table,每个<aaa>是一个table,里面是其下的<ccc>的值
我使用了
<xsl:for-each select="aaa">
   <xsl:for-each select="bbb">
      <xsl:value-of select="ccc"/>
    </xsl:for-each>
</xsl:for-each>

可是返回的都是每个bbb节点下第一个ccc的值,而不是全部ccc的

网上看到一个方法是用
<xsl:value-of select="//ccc[1]"/>
<xsl:value-of select="//ccc[2]"/>
<xsl:value-of select="//ccc[3]"/> 是可以逐一取到ccc的值
但是对于不能确定ccc到底有多少的情况下 应该怎么做那?

谢谢


--  作者:Qr
--  发布时间:9/20/2005 1:21:00 PM

--  
1:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="root/aaa/bbb">
   <xsl:for-each select="ccc">
      <xsl:value-of select="."/><br/>
    </xsl:for-each>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

2:
<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="root/aaa/bbb"/>
</xsl:template>

<xsl:template match="bbb">
<xsl:apply-templates select="ccc"/>
</xsl:template>

<xsl:template match="ccc">
<xsl:value-of select="."/>
</xsl:template>

</xsl:stylesheet>


--  作者:liziqing
--  发布时间:9/20/2005 2:53:00 PM

--  
恩 解决了  谢谢你 :)
--  作者:qjqyx
--  发布时间:9/23/2005 5:11:00 PM

--  
其实有一个更简单的方法,你可以写一个循环的template来实现
试试!


<xsl:template name = "draw_table">
 <xsl:param name = "cnt"/>
  <!--Draw your table here-->
 <xsl:call-template name = "draw_table">
  <xsl:with-param name = "cnt" select = "$cnt - 1>
 </xsl:call-template> 
</xsl:template>


You will call this template for each <aaa>



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