以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XQuery/XLink/XPointer/ 』  (http://bbs.xml.org.cn/list.asp?boardid=14)
----  [提问] count(//x[1]):返回值为什么是6?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=14&rootid=&id=41792)


--  作者:dreamwdt
--  发布时间:12/30/2006 4:17:00 PM

--  [提问] count(//x[1]):返回值为什么是6?
对于这样一个文件:
-----------------------------------------------------------------------
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<test>
    <x id="1">
  <y></y>
  <x id="2"></x>
  <x id="2"></x>
 </x>
    <x id="1">
  <x id="2">
   <y></y>
  </x>
  <x id="2"></x>
 </x>
 <x id="1">
  <x id="2"></x>
  <x id="2">
   <y></y>
  </x>
 </x>
 <x id="1">
  <x id="2">
   <x id="3">
    <y>
                                                                     <y></y>
                                                                </y>
   </x>
  </x>
  <x id="2"></x>
 </x>
</test>
----------------------------------------------------------------
xsl:
----------------------------------------------------------------
<?xml version='1.0'?>
<xsl:stylesheet
 version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" />
<xsl:template match="/">
<body>
<hr/>
  count(//x):<xsl:value-of select="count(//x)"/><br/>
        count(//x[1]):<xsl:value-of select="count(//x[1])"/><br/>
  count(//x/y):<xsl:value-of select="count(//x/y)"/><br/>
  count(//x/y[1]):<xsl:value-of select="count(//x/y[1])"/><br/>
  count(//x[1]/y):<xsl:value-of select="count(//x[1]/y)"/><br/>
  count(//x[1]/y[1]):<xsl:value-of select="count(//x[1]/y[1])"/><br/>
  count(//x/y[1]):<xsl:value-of select="count(//x/y[1])"/><br/>
                                count(//y):<xsl:value-of select="count(//y)"/><br/>
</body>
</xsl:template>
</xsl:stylesheet>
----------------------------------------------------------------

结果:
----------------------------------------------------------------

count(//x):13
count(//x[1]):6
count(//x/y):4
count(//x/y[1]):4
count(//x[1]/y):3
count(//x[1]/y[1]):3
count(//x/y[1]):4
count(//y):5
----------------------------------------------------------------
1.count(//x):13
表示xml 中x元素的总个数
2.count(//x[1]):6
我的理解应该是找出xml中所有的第一层x元素,应该是4,为什么结果是6 ?
3.count(//x/y):4
查找xml中所有位于x元素下的所有y元素总个数(不包括y/y下的)
4.count(//x/y[1]):4
查找所有位于x元素下的所有第一层y元素个数
5.count(//x[1]/y):3
我的理解是所有第一层x下的y个数  .........为什么不是1
6.count(//x[1]/y[1]):3
我的理解是所有第一层x下的所以第一层y ............为什么不是1
7.count(//x/y[1]):4
所有x下的第一层y
8.count(//y):5
所有y
----------------------------------------------------------------------------------------
参考:
/ 选取根节点
// 选取文档中所有符合条件的节点,不管该节点位于何处
[] 条件表达式,指定了选取节点的范围
test 选取test元素的所有子节点
/test选取test元素的根节点
test/x 选取test中的所有x子元素
//x选取文档中的所有x元素
/test/x[1] 选取test节点下的第一个x元素
[position()=1] 等价于[1]
position() 输出当前正在处理的节点索引位置
----------------------------------------------------------------------------------------


--  作者:lao_cai
--  发布时间:5/1/2007 11:13:00 AM

--  
因为count(//x[1])相当于count(//x[position()=1]),所以结果等于6
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
8,013.672ms