Greasy Fork is available in English.

Includes : XPath

xpath Function

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.greasyfork.org/scripts/7145/29376/Includes%20%3A%20XPath.js

// ==UserScript==
// @name           Includes : XPath
// @namespace      http://gm.wesley.eti.br/includes
// @description    xpath Function
// @author         w35l3y
// @email          [email protected]
// @copyright      2009+, w35l3y (http://gm.wesley.eti.br)
// @license        GNU GPL
// @homepage       http://gm.wesley.eti.br
// @version        1.0.0.5
// @language       en
// @include        nowhere
// ==/UserScript==
/**************************************************************************
Author 's NOTE
Original http://lowreal.net/blog/2007/11/17/1
***************************************************************************
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
**************************************************************************/
XPath = Xpath = xpath = function()
{
var a = Array.prototype.slice.call(arguments),	// args
e = a[0],	// expression
c = a[1],	// context
t = a[2];	// type
if (typeof c == "function")
{
t = c;
c = null;
}
if (!c)
c = document.documentElement||document;
var d = c.ownerDocument || c;
e = d.createExpression(e, function(p)
{
var o = d.createNSResolver(c).lookupNamespaceURI(p);
if (o)
return o;
else switch (c.contentType)
{
case "text/xhtml":
case "application/xhtml+xml":
return "http://www.w3.org/1999/xhtml";
default:
return "";
}
});
switch (t)
{
case String:
return e.evaluate(c, XPathResult.STRING_TYPE, null).stringValue;
case Number:
return e.evaluate(c, XPathResult.NUMBER_TYPE, null).numberValue;
case Boolean:
return e.evaluate(c, XPathResult.BOOLEAN_TYPE, null).booleanValue;
case Array:
var r = e.evaluate(c, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null),
o = [];
for ( var ai = 0 , at = r.snapshotLength ; ai < at ; ++ai )
o.push(r.snapshotItem(ai));
return o;
case undefined:
var r = e.evaluate(c, XPathResult.ANY_TYPE, null);
switch (r.resultType)
{
case XPathResult.STRING_TYPE:
return r.stringValue;
case XPathResult.NUMBER_TYPE:
return r.numberValue;
case XPathResult.BOOLEAN_TYPE:
return r.booleanValue;
case XPathResult.UNORDERED_NODE_ITERATOR_TYPE:
var o = [], i;
while (i = r.iterateNext())
o.push(i);
return o;
}
return null;
default:
throw(TypeError("xpath: specified type is not valid type."));
}
};