以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XSL/XSLT/XSL-FO/CSS 』  (http://bbs.xml.org.cn/list.asp?boardid=8)
----  请教高人:如何在XSL中用count()统计子XML文件中Item元素的数量?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=8&rootid=&id=13462)


--  作者:枫桥
--  发布时间:1/11/2005 3:25:00 PM

--  请教高人:如何在XSL中用count()统计子XML文件中Item元素的数量?
XML文件:A.xml
<?xml version="1.0" encoding="utf-8"?>
<?xml:stylesheet type="text/xsl" href="A.xsl"?>
<Person>
<Item ID="1" Name="111" />
<Item ID="2" Name="222" />
<Item ID="3" Name="333" />
<Item ID="4" Name="444" />
</Person>

呵呵,知错就改,改之,谢谢楼下提醒!

XSL文件:A.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
    <table>
    <tr>
    <td rowspan="2" >列表</td>
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
    <td>E</td>
     </tr>
     <xsl:for-each select="//Person//Item">
     <tr>  
    <td><xsl:value-of select="@ID"/></td>
    <td><xsl:value-of select="@Name"/></td>
     </tr>
     </xsl:for-each>
      </table>
</xsl:template>
</xsl:stylesheet>

我的目的是想讲统计到的Item的数量赋值给 <td rowspan="2" >列表</td> 的rowspan,该如何写呢?望高人指点!


[此贴子已经被作者于2005-1-13 14:38:36编辑过]

--  作者:mailtolily
--  发布时间:1/11/2005 4:26:00 PM

--  
首先你的xml中最后的<person>应该为</person>

然后我写了一个xsl如下:
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:variable name="row" select="Person/Item/@ID"/>
<xsl:for-each select="Person/Item">
  <xsl:sort data-type="number" order="descending" select="@ID"/>
  <xsl:if test="position() =1"><xsl:value-of select="@ID"/></xsl:if>
  </xsl:for-each>
</xsl:variable>

<xsl:template match="/">
    <table>
    <tr>
    <th rowspan="{$row+1}" >列表</th>
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
    <td>E</td>
     </tr>
     <xsl:for-each select="//Person//Item">
     <tr>  
    <td><xsl:value-of select="@ID"/></td>
    <td><xsl:value-of select="@Name"/></td>
     </tr>
     </xsl:for-each>
      </table>
</xsl:template>
</xsl:stylesheet>
呵呵,我自己想了一种方法。


[此贴子已经被作者于2005-1-12 11:20:47编辑过]

--  作者:枫桥
--  发布时间:1/13/2005 2:36:00 PM

--  
好像不对,我没有调试过,再此提出几个疑问,望解之:
用<xsl:variable name="row" select="Person/Item/@ID"/>是统计"Item"的数量吗?
不是这样写<xsl:variable name="row" select="count(Person/Item"/>的吗?
<xsl:sort data-type="number" order="descending" select="@ID"/>是排序的
这句{$row+1}就是获取变量“row”的值再+1
下面这行
<xsl:if test="position() =1"><xsl:value-of select="@ID"/></xsl:if>
不甚理解?还望指点?谢谢!

谢谢楼上的!


--  作者:菜籽
--  发布时间:1/17/2005 11:58:00 PM

--  
1.xml

<?xml version="1.0" encoding="gbk"?>
<?xml:stylesheet type="text/xsl" href="1.xsl"?>
<Person>
<Item ID="1" Name="111" />
<Item ID="2" Name="222" />
<Item ID="3" Name="333" />
<Item ID="4" Name="444" />
</Person>

1.xsl

<?xml version="1.0" encoding="gbk"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<xsl:variable name="name" ><xsl:value-of select="count(Person/Item)"/></xsl:variable>
    <table>
    <tr>
    <th rowspan="{$name}" >列表</th>
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
    <td>E</td>
     </tr>
     <xsl:for-each select="//Person//Item">
     <tr>  
    <td><xsl:value-of select="@ID"/></td>
    <td><xsl:value-of select="@Name"/></td>
     </tr>
     </xsl:for-each>
      </table>
</xsl:template>
</xsl:stylesheet>

不知是否符合你的要求



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