xPath注入学习之基础语法学习
字数 1852 2025-08-18 11:38:52
XPath注入学习之基础语法详解
一、XPath概述
XPath是一种在XML文档中查找信息的语言,全称为XML Path Language。它使用路径表达式来选取XML文档中的节点或节点集,是处理XML数据的重要工具。
二、XML节点类型
在XPath中,XML文档被视为文档树,包含七种节点类型:
- 元素节点:如
<book>、<title> - 属性节点:如
lang="en" - 文本节点:如
HarryPotter - 命名空间节点
- 处理指令节点
- 注释节点
- 文档节点(根节点)
三、XML节点关系
XML文档中的节点关系类似于树形结构:
- 父节点(Parent):每个元素和属性都有一个父节点
- 子节点(Children):元素节点可有零个或多个子节点
- 同胞节点(Sibling):拥有相同父节点的节点
- 先辈节点(Ancestor):父节点、祖父节点等
- 后代节点(Descendant):子节点、孙子节点等
四、XPath路径表达式
XPath使用路径表达式选取节点,以下是核心语法:
| 表达式 | 描述 |
|---|---|
nodename |
选取此节点的所有子节点 |
/ |
从根节点选取(绝对路径) |
// |
从匹配节点选择文档中的节点(不考虑位置) |
. |
选取当前节点 |
.. |
选取当前节点的父节点 |
@ |
选取属性 |
五、基本查询示例
bookstore:选取bookstore元素的所有子节点/bookstore:选取根元素bookstorebookstore/book:选取属于bookstore子元素的所有book元素//book:选取所有book元素(不考虑位置)bookstore//book:选择属于bookstore元素后代的所有book元素//@lang:选取名为lang的所有属性
六、谓语(Predicates)
谓语用于更精确的查询,放在方括号中:
/bookstore/book[1]:选取第一个book元素/bookstore/book[last()]:选取最后一个book元素/bookstore/book[last()-1]:选取倒数第二个book元素/bookstore/book[position()<3]:选取前两个book元素//title[@lang]:选取所有拥有lang属性的title元素//title[@lang='eng']:选取lang属性值为eng的title元素/bookstore/book[price>35.00]:选取price值大于35.00的book元素/bookstore/book[price>35.00]/title:选取price>35.00的book元素的title
七、选取未知节点
*:匹配任何元素节点@*:匹配任何属性节点node():匹配任何类型的节点
示例:
/bookstore/*:选取bookstore元素的所有子元素//*:选取文档中的所有元素//title[@*]:选取所有带有属性的title元素
八、组合路径
使用|运算符可以组合多个路径:
//book/title | //book/price:选取book元素的所有title和price元素//title | //price:选取文档中的所有title和price元素/bookstore/book/title | //price:选取bookstore/book的title和所有price
九、JavaScript中的XPath实现
// 加载XML文档
function loadXMLDoc(dname) {
// 实现代码...
return xmlDoc;
}
// 使用XPath查询
var xml = loadXMLDoc("books.xml");
var path = "/bookstore/book/title"; // XPath表达式
// IE6及以下浏览器
if (window.ActiveXObject || xhttp.responseType == "msxml-document") {
var nodes = xml.selectNodes(path);
// 处理结果...
}
// 其他浏览器
else if (document.implementation && document.implementation.createDocument) {
var nodes = xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
// 处理结果...
}
十、实用查询示例
- 查询第二个book的title值:
/bookstore/book[1]/title - 查询所有book的title的值:
/bookstore/book//title - 查询所有带lang属性的title的值:
/bookstore/book//title[@lang] - 查询price大于35的book的title:
/bookstore/book[price>35.00]/title
总结
XPath提供了强大的XML文档查询能力,通过路径表达式可以精确地定位和选择XML文档中的任何部分。掌握XPath语法对于XML数据处理、Web抓取和安全测试(如XPath注入)都至关重要。