Xpath 常用表达式

XPath在HTML/XML解析中的应用
  1. Xpath:
    Xpath 即为XML路径语言,它是一种用来(标准通用标记语言的子集)在HTML/XML文档中查找信息的语言。

  2. XML
    是指可扩展标记语言,是一种标记语言,这点类似于HTML,它的主要用途是传输数据而不是显示数据。

  3. xpath 路径表达式

在这里插入图片描述在这里插入图片描述在这里插入图片描述
案例演示:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
多XPATH定位

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

<think>好的,用户想了解XPath表达式的语法和用法。首先,我需要回忆一下XPath的基础知识。XPath是用于在XML文档中导航和查询节点的语言,分为绝对路径和相对路径两种写法。绝对路径从根节点开始,用斜杠分隔,比如`/bookstore/book/title`。相对路径则是从当前节点出发,比如`//book`可以匹配任何位置的book节点。接下来,用户可能需要知道XPath常用语法元素,比如节点选择、谓词筛选、通配符和轴的使用。比如,`@`符号用来选取属性,`*`是通配符,`[]`里的内容作为谓词条件。此外,XPath函数如`text()`、`contains()`和`count()`也很重要,应该举例说明。 用户提供的引用里提到了Node对象的selectSingleNode和selectNodes方法,这说明他们可能在编程中使用XPath,比如Java的Jaxen库。需要提到如何在代码中应用XPath,比如结合示例XML文档演示如何选取特定节点。还要考虑用户可能的进阶需求,比如性能优化或常见问题。比如,过多使用`//`可能导致效率低下,或者如何处理命名空间的问题。这些问题可以作为相关问题推荐,帮助用户深入理解。 最后,确保回答结构清晰,分点说明语法和用法,提供代码示例,并生成相关问题。同时,注意引用标记的正确使用,比如在提到绝对路径和相对路径时添加[^1],在解释XPath表达式时引用[^2]。</think>### XPath表达式语法与用法详解 #### 一、XPath基本语法结构 1. **路径表达式** - 绝对路径:以根节点`/`开头,例如`/bookstore/book/title`表示逐层选择`<title>`节点[^1] - 相对路径:从当前节点出发,例如`book//price`表示当前节点下任意层级的`<price>`节点 2. **节点选择** - 直接节点名:`book`选择所有`<book>`节点 - 通配符`*`:`/*/title`选择根节点下第二层的所有`<title>` - 多路径`|`:`//title | //price`同时选择标题和价格节点 3. **谓词筛选** 通过`[]`添加条件: ```xpath //book[price > 35] // 价格大于35的书籍 /bookstore/book[last()] // 最后一本书 ``` #### 二、特殊符号与函数 1. **属性选择** - `@`符号定位属性:`//img/@src`获取所有图片的src属性 - 属性条件筛选:`//a[@class='external']`选择class为external的链接 2. **常用函数** - `text()`:`//h1/text()`获取标题文本内容 - `contains()`:`//div[contains(@id,'main')]`匹配包含"main"的div - `count()`:`//table[count(tr) > 5]`选择行数超过5的表格 #### 三、轴(Axis)表达式 通过上下文关系定位节点: ```xpath //book/ancestor::div // 查找book节点的所有div祖先 //td/following-sibling::th // 选择td之后的所有th兄弟节点 child::*[position()=2] // 选择第二个子节点 ``` #### 四、代码应用示例 使用Java解析XML文档: ```java Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse("data.xml"); XPath xpath = XPathFactory.newInstance().newXPath(); // 获取单个节点 Node bookNode = (Node) xpath.evaluate("/bookstore/book[1]", doc, XPathConstants.NODE); // 获取节点集合 NodeList cheapBooks = (NodeList) xpath.evaluate("//book[price<30]", doc, XPathConstants.NODESET); ``` #### 五、性能优化建议 1. 避免过度使用`//`全局搜索 2. 优先使用具体路径而非通配符 3. 对重复查询结果进行缓存
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值