xPath注入学习之基础语法学习
字数 1852 2025-08-18 11:38:52

XPath注入学习之基础语法详解

一、XPath概述

XPath是一种在XML文档中查找信息的语言,全称为XML Path Language。它使用路径表达式来选取XML文档中的节点或节点集,是处理XML数据的重要工具。

二、XML节点类型

在XPath中,XML文档被视为文档树,包含七种节点类型:

  1. 元素节点:如<book><title>
  2. 属性节点:如lang="en"
  3. 文本节点:如HarryPotter
  4. 命名空间节点
  5. 处理指令节点
  6. 注释节点
  7. 文档节点(根节点)

三、XML节点关系

XML文档中的节点关系类似于树形结构:

  • 父节点(Parent):每个元素和属性都有一个父节点
  • 子节点(Children):元素节点可有零个或多个子节点
  • 同胞节点(Sibling):拥有相同父节点的节点
  • 先辈节点(Ancestor):父节点、祖父节点等
  • 后代节点(Descendant):子节点、孙子节点等

四、XPath路径表达式

XPath使用路径表达式选取节点,以下是核心语法:

表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取(绝对路径)
// 从匹配节点选择文档中的节点(不考虑位置)
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

五、基本查询示例

  1. bookstore:选取bookstore元素的所有子节点
  2. /bookstore:选取根元素bookstore
  3. bookstore/book:选取属于bookstore子元素的所有book元素
  4. //book:选取所有book元素(不考虑位置)
  5. bookstore//book:选择属于bookstore元素后代的所有book元素
  6. //@lang:选取名为lang的所有属性

六、谓语(Predicates)

谓语用于更精确的查询,放在方括号中:

  1. /bookstore/book[1]:选取第一个book元素
  2. /bookstore/book[last()]:选取最后一个book元素
  3. /bookstore/book[last()-1]:选取倒数第二个book元素
  4. /bookstore/book[position()<3]:选取前两个book元素
  5. //title[@lang]:选取所有拥有lang属性的title元素
  6. //title[@lang='eng']:选取lang属性值为eng的title元素
  7. /bookstore/book[price>35.00]:选取price值大于35.00的book元素
  8. /bookstore/book[price>35.00]/title:选取price>35.00的book元素的title

七、选取未知节点

  1. *:匹配任何元素节点
  2. @*:匹配任何属性节点
  3. node():匹配任何类型的节点

示例:

  • /bookstore/*:选取bookstore元素的所有子元素
  • //*:选取文档中的所有元素
  • //title[@*]:选取所有带有属性的title元素

八、组合路径

使用|运算符可以组合多个路径:

  1. //book/title | //book/price:选取book元素的所有title和price元素
  2. //title | //price:选取文档中的所有title和price元素
  3. /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);
    // 处理结果...
}

十、实用查询示例

  1. 查询第二个book的title值:/bookstore/book[1]/title
  2. 查询所有book的title的值:/bookstore/book//title
  3. 查询所有带lang属性的title的值:/bookstore/book//title[@lang]
  4. 查询price大于35的book的title:/bookstore/book[price>35.00]/title

总结

XPath提供了强大的XML文档查询能力,通过路径表达式可以精确地定位和选择XML文档中的任何部分。掌握XPath语法对于XML数据处理、Web抓取和安全测试(如XPath注入)都至关重要。

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 :选取根元素bookstore bookstore/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实现 十、实用查询示例 查询第二个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注入)都至关重要。