一个低级错误,XPath中/和//

昨天我做的一个程序中被发现有一个错误,我检查了程序,但是没有问题,检查XSLT文件,找到了问题所在,这是一个比较低级的失误。
XPath的路径选择错误。
先说明一下程序的结构,数据记录在MS SQL2000中,使用ASP访问数据库,把它展示出来,因为这是一个分级的树形结构,所以我用XML来作为数据集的结构,而没有使用Recordset。它的XML结构如下:
<?xml version="1.0" encoding="gb2312"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 <xs:element name="RootIndex">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="ItemIndex"/>
   </xs:sequence>
   <xs:attribute name="BranchCode" type="xs:byte" use="required"/>
   <xs:attribute name="StatDate" type="xs:string" use="required"/>
  </xs:complexType>
 </xs:element>
 <xs:element name="ItemIndex">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="ItemIndex" minOccurs="0" maxOccurs="unbounded"/>
   </xs:sequence>
   <xs:attribute name="ID" type="xs:int" use="required"/>
   <xs:attribute name="Name" type="xs:string" use="required"/>
   <xs:attribute name="Score" type="xs:int" use="required"/>
   <xs:attribute name="Level" type="xs:int" use="required"/>
  </xs:complexType>
 </xs:element>
</xs:schema>

它产生的一个xml实例文档如下:
<?xml version="1.0" encoding="gb2312"?>
<RootIndex BranchCode="100" StatDate="2004-6-1">
 <ItemIndex ID="5" Name="根节点" Score="15" Level="1">
  <ItemIndex ID="6" Name="子节点6" Score="3" Level="2"/>
  <ItemIndex ID="7" Name="子节点7" Score="8" Level="2">
   <ItemIndex ID="8" Name="子节点8" Score="4" Level="3"/>
   <ItemIndex ID="9" Name="子节点9" Score="4" Level="3"/>
  </ItemIndex>
  <ItemIndex ID="10" Name="子节点10" Score="4" Level="2"/>
 </ItemIndex>
</RootIndex>


在网页的展示当中,我使用XSLT来将XML数据集转换成HTML文档,结果展示这是一个具有分级结构的表格。

因为叶节点的@Score属性能够被用户编辑,父节点需要统计叶节点的@Score,网页提供一个提交的按钮,只有提交之后,程序才重新计算总分,往数据库里记录,在没有提交分数之前,用xslt把父节点上的@Score重新计算,然后刷新表格区的信息。
在xslt中的求子节点分数和的表达式应该为:sum(*/@Score),但是在路径选择上,我犯了一个错误,我把它写成了sum(*//@Score)。
路径*/@Score表示对当前子节点中的@Score属性集合
路径*//@Score表示对当前节点的所有后代节点中的@Score属性

错误的xslt把ID为5的节点中的@Score计算为23

XPath中,/和//的区别就是一个选择子节点,一个选择后代节点,因此计算结果出现了错误。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值