- 浏览: 1576256 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
nich002:
原网站失效了。撸主简单粗暴的复制过来,可读性极差!差评!
Apache配置详解(最好的APACHE配置教程) -
107x:
不错,谢谢!
LINUX下查看文件夹下的文件个数! -
Hypereo:
好你妹,连个格式都没有!
Apache配置详解(最好的APACHE配置教程) -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子 -
resteater:
代码排版感觉有点乱!收发信息代码可读性不强!请问第一次发服务器 ...
java socket例子
From: http://hi.baidu.com/zouzhubiao/blog/item/e2ffce5c443c6b42fbf2c0bf.html
使用 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数组。
评论
var fields = []; // obj is an xml object if(window.ActiveXObject) { var tobj = obj.documentElement.selectNodes("/root/field/item"); for(var i=0;i<tobj.length; i++) { fields.push(tobj[i].text); } } else { var tobj = obj.evaluate("/root/field/item",obj.documentElement,null, XPathResult.ANY_TYPE, null); var tmp = tobj.iterateNext(); while(tmp) { fields.push(tmp.textContent); tmp = tobj.iterateNext(); } } alert(fields);
发表评论
-
几个不错的ff下调试插件
2009-12-11 11:14 1849记录一下经常使用的ff插件,其中firebug、switchh ... -
20 种提升网页速度的技巧
2009-04-15 20:19 1245From:http://www.ibm.com/develop ... -
25 个在 Web 中嵌入图表的免费资源
2009-04-14 21:27 1657From: http://www.cnbeta.com/art ... -
15个网站用户体验优化禁忌
2009-04-08 22:57 1168From:http://www.blueidea.com/de ... -
让IE8兼容IE7
2009-03-27 15:10 4178今天在搜狐首页发现:<meta http-equiv ... -
FF下分析页面加载的工具
2009-03-25 16:03 2466今天同事推荐YSlow作为 ... -
IE6下页面显示空白的问题
2009-03-24 17:01 5299今天又碰到了一个页面在IE6下加载完后一片空白的问题,而且页面 ... -
支持IE6、IE7的关闭页面的函数
2009-03-17 15:40 1693function closeWin() { var isI ... -
很弱很无奈的一段代码(打开的页面更新父窗口的链接)
2009-03-12 11:51 1013if(parent.window.opener) { pa ... -
js小脚本
2009-02-26 10:13 1539清除元素: var clearNode = functio ... -
处理一次性事件的模式
2009-02-12 20:20 1241有的时候我们需要给一个标签增加一次性的事件,比如先在输入框中增 ... -
Linux:rsync服务器的快速搭建和使用
2008-12-30 10:15 1319From: http://tech.ddvip.com/200 ... -
js导致的页面空白问题
2008-12-29 13:45 3129今天遇到一个很奇怪的问题,系统的一个页面在一台机器上无法完全展 ... -
IE6下history.back无效的问题
2008-12-26 23:56 3788解决IE6中history.back()无法返回的问题:< ... -
浏览器兼容比较好的设置min-width的方式
2008-12-12 18:45 2533<!DOCTYPE HTML PUBLIC " ... -
CSS代码分享:浏览器CSS Reset方法十例zz
2008-12-07 18:06 1154From: http://www.52css.com/arti ... -
在Javascript中,什么是闭包(Closure)
2008-12-02 11:11 1036from: http://javascript.chinaht ... -
Unicode、GB2312、GBK和GB18030中的汉字[转]
2008-11-25 15:22 3840From: http://blog.csdn.net/fmdd ... -
空字符串的split
2008-11-21 19:16 1558本来以为是零,但是在java和js里试了以后发现居然都是1,很 ... -
docType 相关的loose.dtd导致的无法获取scrollTop的解决
2008-11-19 11:32 1661function iecompattest(){ retu ...
相关推荐
接着,我们编译了XPath表达式(例如`//item`,表示查找所有`<item>`元素),然后使用`evaluate()`方法来执行表达式并获取结果。 在实际应用中,JDOM结合XPath可以极大地提高处理XML文档的效率和灵活性。例如,你...
5. **执行XPath查询**:使用`evaluate`方法执行XPath表达式,并将其结果转换为适当的数据类型。例如,如果查询返回的是节点集,可以使用`NodeList`。 ```java String expression = "/root/element"; NodeList nodes...
它们提供了API或者库,如Java的`javax.xml.xpath`,Python的`lxml`,JavaScript的`document.evaluate`,以便于在代码中执行XPath表达式并获取结果。 六、XPath版本差异 XPath 2.0和3.1引入了更多特性,如类型系统、...
在Java中使用Jaxen,你需要创建一个`XPath`对象,编译XPath表达式,然后用它来评估XML文档,获取匹配的节点列表。以下是一个简单的示例: ```java import org.jaxen.JaxenException; import org.jaxen.dom.DOMXPath...
这个方法使用XPath表达式 `cXPathString` 在指定的节点 `xNode` 上执行查询,并返回一个包含匹配节点的数组。 ##### 2. 扩展Element ```javascript // 扩展Element原型以添加selectNodes方法 Element.prototype....
DOM4J使用`XPathFactory`来创建`XPath`对象,然后通过`createXPath()`方法构建XPath表达式: ```java XPathFactory factory = XPathFactory.instance(); XPath xpath = factory.newXPath(); ``` **4. 执行XPath...
- **执行XPath查询**:使用`XPath`对象的`evaluate()`方法在`Document`上执行XPath表达式,获取匹配的节点集、字符串值、数值或布尔值。 - **处理查询结果**:根据返回的结果类型,你可以遍历节点集,访问元素、属性...
3. **执行XPath表达式**:使用`XPathExpression`对象的`evaluate()`方法,在XML源文档上执行XPath表达式。根据需要,`evaluate()`可以返回不同类型的值,如节点集、字符串、数字或布尔值。 ```java Document doc =...
XPath(XML Path Language)是一种在XML文档中查找信息的语言,它是W3C(World Wide Web Consortium)的标准之一。XPath被设计用来在XML文档中导航,选取节点,如元素、属性和文本,它也是XSLT(XML Stylesheet ...
- `document.evaluate()` 是JavaScript中执行XPath查询的主要方法。 - `XPathResult` 对象返回查询的结果,它可以是单个节点、节点列表或其他类型的数据。 - `NodeIterator` 和 `TreeWalker` 接口可以帮助遍历...
在Java编程环境中,XPath是一种强大的查询语言,用于在XML文档中查找信息。它允许我们根据节点的名称、属性、值或其他特性来定位XML文档中的特定部分。本篇将深入探讨如何在Java中利用XPath来提取XML文档中的数据,...
XPath手册通常会包含更多详细的信息,比如XPath的完整语法、函数库的使用、命名空间的处理方法,以及各种复杂查询的实例,这对于初学者来说是非常有价值的参考资料。通过深入学习和实践,开发者可以熟练地利用XPath...
3. **执行XPath**:调用`XPath.evaluate(node)`或`XPath.evaluateFirst(node)`方法,传入你要查询的节点,返回结果可以是节点集、字符串、数字或布尔值。 4. **处理结果**:根据返回的结果类型,你可以遍历节点集、...
5. 使用evaluate方法执行XPath表达式并获取结果集。 6. 遍历和处理选取的节点,如修改、添加或删除节点。 7. 使用XPath的函数和轴,如text()、child::、attribute::等,进行更复杂的查询。 8. 实现自定义的XPath函数...
例如,`document.evaluate()`方法可以执行XPath查询,并返回一个迭代器,用于遍历匹配到的所有节点。此外,`document.createNSResolver()`可以创建命名空间解析器,处理包含命名空间的XML文档。 在提供的压缩包文件...
例如,`XMLDocument.prototype.selectNodes`方法首先创建一个命名空间解析器,然后使用`evaluate()`方法执行XPath表达式,得到一个结果集,再将结果集转换为数组返回。`XMLDocument.prototype.selectSingleNode`方法...
2. **XPath的使用方法** - **选取元素**:使用元素名称选取,例如`/html/body`选取HTML文档中的body元素。 - **选取属性**:使用`@`符号加属性名,如`//input/@type`选取所有input元素的type属性。 - **文本内容*...
这个方法接收多个参数,包括XPath表达式、上下文节点、命名空间解析器(可选)、返回类型以及结果对象引用。查询结果可以是节点集、字符串、数字或布尔值。 例如,我们可以使用以下代码查询XML文档中的所有`book`...