美文网首页
63.1-XPath概念和实例

63.1-XPath概念和实例

作者: BeautifulSoulpy | 来源:发表于2020-08-28 11:40 被阅读0次

人们对于不确定之事的兴趣,永远多于已经确定之事,过去和现在经常被人们遗忘。所以,能够编织梦想的人,永远是最受欢迎之人!

总结:

  1. HTML与XML的差别
    HTML是用来做数据格式的显示的,里面的数据是为了用标签在浏览器中绘制出来的;
    XML的创造是为了在系统之间传输数据,树形结构、标签;费流量;可以用JSON
  2. XML中,<> 内的用来存放属性\类 ; 用条件 @ 来匹配; [] 内些匹配条件
  3. node() \ local-name() \ 函数返回 为节点

1. HTML解析

HTML的内容返回给浏览器,浏览器就会解析它,并对它渲染。
HTML 超文本表示语言,设计的初衷就是为了超越普通文本,让文本表现力更强。
XML扩展标记语言,不是为了代替HTML,而是觉得HTML的设计中包含了过多的格式,承担了一部分数据之外的
任务,所以才设计了XML只用来描述数据。
HTML和XML都有结构,使用标记形成树型的嵌套结构。DOM(Document Object Model)来解析这种嵌套树型
结构,浏览器往往都提供了对DOM操作的API,可以用面向对象的方式来操作DOM。

2. XPath****

http://www.w3school.com.cn/xpath/index.asp 中文教程

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。

工具
XMLQuire win7+需要.NET框架4.0-4.5
测试XML、XPath

<?xml version="1.0" encoding="utf-8"?>
<bookstore>
   <book id="bk101">
      <author>Gambardella, Matthew</author>
      <title>XML Developer's Guide</title>
      <genre>Computer</genre>
      <price>44.95</price>
      <publish_date>2000-10-01</publish_date>
      <description>An in-depth look at creating applications 
      with XML.</description>
   </book>
   <book id="bk102">
      <author>Ralls, Kim</author>
      <title>Midnight Rain</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2000-12-16</publish_date>
      <description>A former architect battles corporate zombies, 
      an evil sorceress, and her own childhood to become queen 
      of the world.</description>
   </book>
   <book id="bk104">
      <author>Corets, Eva</author>
      <title>Oberon's Legacy</title>
      <genre>Fantasy</genre>
      <price>5.95</price>
      <publish_date>2001-03-10</publish_date>
      <description>In post-apocalypse England, the mysterious 
      agent known only as Oberon helps to create a new life 
      for the inhabitants of London. Sequel to Maeve 
      Ascendant.</description>
   </book>
</bookstore>

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。

/ 根结点
元素节点,例如 book,title等
属性节点 : id=
Corets, Eva 元素节点,
id="bk104" 是属性节点,id是元素节点book的属性

节点之间的嵌套形成父子(parent、children) 关系
具有同一个父节点的不同节点是兄弟(sibling) 关系

谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点。
谓语被嵌在方括号中[]。谓语就是查询的条件。

操作符或表达式 含义
/ 从根节点开始找
// 从当前节点开始的任意层找
. 当前节点
.. 当前节点的父节点
@ 选择属性
节点名 选取所有这个节点名的节点
* 匹配任意元素节点
@* 匹配任意属性节点
node() 匹配任意类型的节点
text() 匹配text类型节点

XPath 轴(Axes)

轴名称 结果
ancestor 选取当前节点的所有先辈(父、祖父等)
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
attribute 选取当前节点的所有属性。@id 等价于 attribute::id
child 选取当前节点的所有子元素。title 等价于 child:title
descendant 选取当前节点的所有后代元素(子、孙等)
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身
following 选取文档中当前节点的结束标签之后的所有节点
namespace 选取当前节点的所有命名空间节点
parent 选取当前节点的父节点
preceding 直到所有这个节点的父辈节点,顺序选择每个父辈节点前的所有同级节点
preceding-sibling 选取当前节点之前的所有同级节点
self 选取当前节点。 等价于 self::node()
根bookstore下任意层 title或price
双击大纲变为 当前节点
XPATH实例

以斜杠开始的称为绝对路径,表示从根开始;
不以斜杆开始的称为相对路径,一般都是依照当前节点来计算;当前节点在上下文环境中,当前节点很可能已经不是跟节点了;

一般为了方便,往往XML如果层次很深,都会使用//来查找节点;

路径表达式 含义
title 选取当前节点下所有title子节点
/book 从根结点找子节点是book的,找不到
book/title 当前节点下所有子节点book下的title节点
//title 从根节点向下找任意层中title的节点
book//title 当前节点下所有book子节点下任意层次的title节点
//@name 任意层下含有name的 属性,取回的是属性
//book[@id] 任意层下含有name属性的book节点
//book[@id="bk101"] 任意层下含有name属性且等于'bk101'的book节点
/bookstore/book[1] 根节点bookstore下第一个book节点,从1开始
/bookstore/book[1]/@id 根节点bookstore下第一个book节点的id属性
/bookstore/book[last()-1] 根节点bookstore下倒数第二个book节点,函数last()
/bookstore/* 匹配根节点bookstore的所有子节点, 不递归
//* 匹配所有子孙节点
//[@] 匹配所有有属性的节点
//book[@*] 匹配所有有属性的book节点
//@* 匹配所有属性
//book/title | //pric 匹配book下的title节点或者任意层下的price
//book[position()=2] 匹配book节点,取第二个
//book[position()<last()-1] 匹配book节点,取位置小于倒数第二个
//book[price>40] 匹配price节点值大于40的book节点
//book[2]/node() = * 匹配位置为2的book节点下的所有类型的节点
//book[1]/text() 匹配第一个book节点下的所有文本子节点
//book[1]//text() 匹配第一个book节点下的所有文本节点
//*[local-name()='book'] 匹配所有节点且不带限定名的节点名称为book的所有节点
//book/child::node()
[local-name()='price' and text()<10
]
所有book节点的子节点中名字叫做price的且其内容小于10的节点,等价于
//book/price[text()<10]
等价式 //book[price<6]/price
//book/price[text()<6]
//book/child::node()[local-name()='price' and text()<6]
这三种等价
//book//*[self::title or self::price] 所有book节点下子孙节点,这些节点是title或者price,等价于//book//title |
//book/price,也等价于//book//*[local-name()='title' or local-name()='price']
//*[@class] 所有有class属性的节点
//*[@class="bookinfo even"] 所有属性为"bookinfo even"的节点
//*[contains(@class,'even')] 属性class中包含even字符串的节点
//*[contains(local-name(),'book')] 标签名包含book的节点
3. lxml

lxml 是Python下功能丰富的XML、HTML解析库, 性能非常好, 是对libxml 2和libxslt的封装。
最新版支持Python 2.6+, python 3支持到3.6。

相关文章

  • 63.1-XPath概念和实例

    人们对于不确定之事的兴趣,永远多于已经确定之事,过去和现在经常被人们遗忘。所以,能够编织梦想的人,永远是最受欢迎之...

  • 2018-07-31Python (11)

    python 基础语法(11) 面向对象 概念 面向对象最重要的概念就是类和实例,类是实例的抽象,而实例是类的具象...

  • 跟我一起学Python(五)

    类和实例 类的定义和实例化 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的...

  • js笔记三十三之原型链模式基础

    原型链模式 构造函数模式中拥有了类和实例的概念, 并且实例和实例之间是相互独立开的, -> 实例识别 基于构造函数...

  • Python面向对象编程

    类和实例 面向对象最重要的概念就是类(class)和实例(instance),类是抽象的模板,而实例是根据类创建出...

  • 实例变量和属性

    实例变量和属性是两个不同的概念, 属性是iOS5之后新增的概念,属性的正常使用依附于实例变量1,实例变量1.1,定...

  • Javascript学习笔记-面向对象编程

    类和实例是大多数面向对象编程语言的基本概念,不过在JS中不区分类和实例的概念,而是通过原型(prototype)来...

  • JS原型链模式

    构造函数模式中拥有了类和实例的概念,并且实例和实例之间是相互独立开的即实例识别。基于函数的原型模式解决了方法和属性...

  • RXJS

    实例概念

  • 前端教程:怎样添加和访问静态成员?

    在面向对象中有静态成员和实例成员的概念,实例成员是指实例对象的成员,例如,上述代码中的pl.name就是实例成员;...

网友评论

      本文标题:63.1-XPath概念和实例

      本文链接:https://www.haomeiwen.com/subject/ziiksktx.html