该函数document.evaluate函数暂且不支持所有浏览器!IE不支持 使用 Greasemonkey 时会遇到的功能最为强大的一个工具就是 evaluate 函数。通过使用XPath这种查询语言,它可以用来寻找页面中的元素,属性和文本。 举个例子来说,如果您想获得某个页面上的全部链接。您也许会想到使用document.getElementsByTagName('a');但是如果您还要继续检查是否每个链接都具有href属性,因为<a>还可以用来作为锚名称使用,这时,您需要使用Firefox内建的XPath 支持去获取全部具有href属性的<a>元素。 例子: 获取页面上的全部链接 var allLinks, thisLink; allLinks = document.evaluate( '//a[@href]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < allLinks.snapshotLength; i++) { thisLink = allLinks.snapshotItem(i); // do something with thisLink } 这里,document.evaluate 是关键的部分。 它把 XPath 查询语句作为一个字符串,其它的参数稍后再做解释。 这条 XPath 查询语句可以找到全部具有href属性的<a>元素,并将它们按照随机的顺序依次返回。(这就是说,第一个被返回的元素并一定也是页面上的第一个这样的元素。) 随后,您就可以用 allLinks.snapshotItem(i) 函数访问每一个元素。 XPath表达式所能做到的甚至会使您惊讶。请看下面这个例子,它获取了全部具有title属性的元素。 例子: 获取全部具有title属性的元素 var allElements, thisElement; allElements = document.evaluate( '//*[@title]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < allElements.snapshotLength; i++) { thisElement = allElements.snapshotItem(i); switch (thisElement.nodeName.toUpperCase()) { case 'A': // this is a link, do something break; case 'IMG': // this is an image, do something else break; default: // do something with other kinds of HTML elements } } 如果您已经引用了某个元素(例如上面的 thisElement),您就可以用 thisElement.nodeName 来替代它所对应的在 HTML 页面中的标签名称。如果被访问的这个页面是以 text/html 的方式被服务器执行, 那么标签名称总是用大写子母返回,不论它在原始页面是如何定义的。 如果页面是 application/xhtml+xml 方式的, 那么标签名称就会以小写子母返回。 不论哪种情况,我总是用 thisElement.nodeName.toUpperCase() 得到大写的标签名称。 这是另外一个 XPath 查询,它返回了 div 中的一个特殊的类。 例子: 获取 div 中的 sponsoredlink 类 var allDivs, thisDiv; allDivs = document.evaluate( "//div[@class='sponsoredlink']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); for (var i = 0; i < allDivs.snapshotLength; i++) { thisDiv = allDivs.snapshotItem(i); // do something with thisDiv } 注意我在 XPath 查询语句外使用了双引号,这样在语句内部就可以使用单引号。 在 document.evaluate 函数中有很多参数。第二个参数 (在前两个例子中都是docoment) 可以是一个元素, XPath 查询只返回包含在这个元素内的元素。所以,如果您已经引用了一个元素(比如, 通过 document.getElementById 或者 通过 document.getElementsByTagName 得到的数组中的一个元素), 那么您就可以限制查询只返回这个元素的子元素。 第三个参数是对一个叫做 namespace resolver 函数的引用, 它只有在工作在 application/xhtml+xml 类型的页面上的用户脚本中是有效的。即使您对它不是很了解也没有关系,因为那种类型的页面不是很多,您可能一次也遇不到。如果您很想知道它是如何使用的,请参考 Mozilla XPath documentation (http://www-jcsu.jesus.cam.ac.uk/~jg307/mozilla/xpath-tutorial.html),那里解释了它的用法。 第四个参数是结果的返回方式。在前面的两个例子中都使用了 XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, 它将结果以随机的方式返回。我使用的几乎全部都是这种方式,但是,出于某种原因,您想让结果以它们在页面上出现的顺序返回,您可以使用 XPathResult.ORDERED_NODE_SNAPSHOT_TYPE 这种方式。 Mozilla XPath documentation (http://www-jcsu.jesus.cam.ac.uk/~jg307/mozilla/xpath-tutorial.html)还给出了另外的一些用例。 第五个参数用来合并两次 XPath 查询的结果。 在获得第一次调用 document.evaluate 得到的结果之后,它将两次查询的结果一起返回。在前面的两个例子中,这个参数都用了null,这意味着我们只想获得本次查询的结果。 现在您明白了吗?XPath 既可以很简单,也可以很难,这取决于您要如何使用它。在此我强烈推荐您尽快去阅读 this excellent XPath tutorial (http://www.zvon.org/xxl/XPathTutorial/General/examples.html),从而了解更多的 XPath 语法。至于 document.evaluate 函数的其它参数, 我几乎从来不使用它们。事实上,您可以自己定义一个函数来封装它们。 例子: 自定义的 xpath 函数 function xpath(query) { return document.evaluate(query, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); } 在定义了这个函数之后,您就可以调用 xpath('//a[@href]') 来获得某个页面上的全部链接, 或者调用 xpath('//* [@title]') 来获得具有 title 属性的元素。您仍然需要通过 snapshotItem 函数来访问结果中的每一项,这个函数的类型并不是一个规则的Javascript数组。 XPaht学习文档url:http://www.zvon.org/xxl/XPathTutorial/General/examples.html
相关推荐
8. **函数**:XPath提供了丰富的内置函数,如 `count()` 计算节点数量,`substring()` 截取字符串,`normalize-space()` 去除字符串两端空格等。 在你的实例文件 `book.xml` 中,你可能会有一个结构化的XML文档,...
3. **XPath函数**: XPath包含一系列内置函数,如 `text()` 返回节点的文本内容,`count()` 计算节点集的个数,`concat()` 连接字符串等。这些函数能进一步增强我们对XML数据的处理能力。 4. **文件缓存**: 文件缓存...
了解XPath的基本语法、选择器和函数,是理解这个搜索引擎工作原理的基础。 2. **ASP.NET Web 应用程序开发**:掌握ASP.NET的MVC(Model-View-Controller)架构,以及如何创建HTTP请求处理管道,理解页面生命周期和...
此外,XPath 还提供函数库,比如 `text()` 用于获取节点的文本内容,`count()` 计算节点数量,以及 `contains()` 检查字符串是否包含特定子串。 XPath 在实际应用中广泛用于 XSLT(XSL 转换)中,用来从源 XML 文档...
此外,XPath还提供了函数库,用于对节点集进行运算,如排序、数值计算等。 CSS(Cascading Style Sheets)是用于描述HTML或XML(包括SVG、MathML等各种XML方言)文档样式的样式表语言。CSS控制网页元素的布局、颜色...
4. **函数库支持**:内置了完整的XPath函数库,用户可以直接调用这些函数,如字符串操作、数值计算、节点集合处理等。 5. **代码生成**:对于开发者而言,IEXPath可以生成适用于各种编程语言(如Java、Python、...
- **函数调用**: XPath定义了一系列内置函数,用于处理节点集合、字符串、数字和布尔值。 - **节点集合**: XPath中的路径表达式返回的是节点集合。 - **布尔**: 提供了`true()`, `false()`, `not()`等函数来处理布尔...
XPath基于节点树模型,可以用来选取节点,如元素、属性、文本等。它提供了一种简洁的语法来定位XML文档的特定部分,也可以进行数值计算和逻辑运算,常用于XSLT和XQuery等XML处理技术中。 最后,正则表达式,是一种...
XPath表达式可以用来导航XML文档的结构,选择特定的节点,或者计算数值。学习XPath对于XML处理和XSLT转换至关重要,特别是在需要从大型XML文件中提取特定信息时。 综合以上,这个压缩包是一个全面的IT学习资源库,...
4. **异步数据获取**:使用XMLHttpRequest对象进行后台数据查询和检索,实现局部页面刷新。 5. **脚本绑定**:使用JavaScript将以上各项技术整合起来。 AJAX并非单一技术,而是一系列技术的组合应用。例如,DHTML和...
通过`jQuery.parseXML()`解析XML字符串,使用`find()`和`each()`遍历节点,结合XPath或`$.ajax()`获取服务器上的XML,以及有效地处理错误,你可以轻松地构建功能丰富的XML应用程序。在实际项目中,根据具体需求选择...
4. **DOM Level 3 XPath**:引入XPath支持,允许使用XPath表达式快速定位文档中的节点。 5. **DOM Level 3 CSS**:提供了与CSS样式表交互的API,可以查询和修改元素的样式。 学习DOM不仅有助于理解和操作网页内容,...
- XPath是一种用于在XML文档中查找信息的语言,它可以用来选择节点或节点集。 - XPath表达式可以非常精确地定位到文档中的某个位置,这对于数据提取非常有用。 - **5.2 XPath的应用场景** - XPath广泛应用于各种...
它不仅能够高效地解析XML,还能通过简洁的语法进行复杂的数据检索和转换。 在Web 2.0时代,随着Asynchronous JavaScript and XML (Ajax)的广泛应用,动态Web应用程序的用户体验得到了显著提升。Ajax允许在不刷新...
2. **XPath和XQuery支持**:支持XPath查询语言来定位XML节点,以及XQuery语言来处理XML数据。 3. **RESTful API**:通过HTTP协议提供RESTful服务,方便Web应用访问。 4. **版本控制**:具有版本控制系统,可以跟踪和...
XML数据库专门设计用于存储和检索XML文档,它们提供对XML数据的原生支持,例如XPath查询和XQuery语言。 八、XML与JSON XML和JSON(JavaScript Object Notation)都是数据交换格式,但JSON通常用于前端和后端间的轻...
XPath表达式可以选取文档中的元素、属性、文本等,并提供了丰富的函数库进行节点操作。 4. **XSLT**:XSL Transformations(XSLT)是一种转换XML文档的语言,它用于将XML文档转换为其他XML文档,或者HTML、PDF等非...
XML与XSLT(Extensible Stylesheet Language Transformations)和XPath(XML Path Language)相结合,可以实现数据的格式化和检索。XSLT用于转换XML文档的结构和样式,而XPath则提供了一种表达在XML文档中查找信息的...
尽管如此,flickr通过使用Expatriate(通过PEAR::XML::Parser封装)来克服这一限制,但遗憾的是,当时并未有XPath支持,这在一定程度上限制了查询和数据提取的灵活性。 总体而言,flickr的架构设计展示了如何在一个...
**XPath**:XML路径语言,用于在XML文档中查找信息,通过路径表达式选取节点。 **XQuery**:一种更强大的查询语言,专门用于XML数据的检索和处理。 **XML在Web服务中的应用**:XML是SOAP(简单对象访问协议)和...