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

原创 2004年07月15日 09:52:00

昨天我做的一个程序中被发现有一个错误,我检查了程序,但是没有问题,检查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中,/和//的区别就是一个选择子节点,一个选择后代节点,因此计算结果出现了错误。

 

python+lxml+xpath提取nature网站中的article基本信息【初级版】

下图为网站上的一篇article,可以明显提取到:题目,作者,作者单位(afiliation),贡献情况,通讯作者(corresponding author), 期号,卷号,投稿时间,接收时间,发表时...
  • lan2720
  • lan2720
  • 2014年03月08日 23:57
  • 3832

JsoupXpath实例(Jsoup对Xpath的支持)

话不多说直接上代码,JsoupXpath在jsoup(就是JS函数风格)上多了Xpath风格调用
  • csdnZhanghaoRed
  • csdnZhanghaoRed
  • 2016年12月23日 16:47
  • 732

selenium 定位不到元素的原因及解决办法

1.动态id定位不到元素for example: //WebElement xiexin_element = driver.findElement(By.id("_mail_compo...
  • xlemonok
  • xlemonok
  • 2017年02月13日 13:47
  • 2535

异常

/*  * 异常的处理方式:  *    方式一:捕获处理  *        捕获处理的格式:  *              try{  *                 可能发生异常...
  • love_zjl
  • love_zjl
  • 2016年10月26日 15:25
  • 86

浅谈XPath注入检测思路和方法

我们都应该知道XPath这种语言是做什么的,就不细讲了,具体参见菜鸟教程 XPath语法详解 XML不是保存企业数据的,但是很多情况下都用来保存应用程序配置数据,小型应用程序也保存简单信息,例如角色权...
  • pygain
  • pygain
  • 2017年01月15日 14:00
  • 720

爬虫、网页分析解析辅助工具 Xpath-helper

搬运自本人博客:http://www.xgezhang.com/xpath_helper.html 每一个写爬虫、或者是做网页分析的人,相信都会因为在定位、获取xpath路径上花费大量的时间...
  • u014237185
  • u014237185
  • 2015年08月16日 17:39
  • 6489

selenium+webdriver+python定位不到元素的原因及解决办法

在定位元素过程中,总会遇到这样那样的问题,下面就最近遇到的4大类问题,得到的解决方法,来做个总结。 1. xpath描述错误的 这个是因为在描述路径的时候没有按照xpath的规则来写 造成找...
  • liujingqiu
  • liujingqiu
  • 2016年04月28日 17:00
  • 10492

webdriver报不可见元素异常方法总结

最近一直在学Selenium相关东西,学到webdriver这块,出现报不可见元素异常方法异常,后来网上找了好多相关资料都没搞定,也没看明白,最后发现是xpath中写了calss属性有问题。现在把学习...
  • xiaomin1991222
  • xiaomin1991222
  • 2016年03月10日 16:05
  • 101

java中使用xPath读取xml中的数据

XPath是获取xml中数据的一种方式,其简单语法结构如下(引用自w3c): XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps)...
  • puyangmengxue
  • puyangmengxue
  • 2017年01月05日 14:22
  • 1305

XPath 详解,总结

XPath简介 XPath是W3C的一个标准。它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计。目前有XPath1.0和XPath2.0两个版本。其中Xpath1.0是19...
  • zengshunyao
  • zengshunyao
  • 2014年08月06日 13:13
  • 1656
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个低级错误,XPath中/和//
举报原因:
原因补充:

(最多只允许输入30个字)