XPath即为XML路径语言,它是一种用来确定XML标准通用标记语言的子集)文档中某部分位置的语言。XPath基于XML的树状结构,提供在数据结构树中找寻节点的能力。XPath 是 XML 的查询语言,和 SQL 的角色很类似。以下面 XML 为例,介绍 XPath 的语法。

<?xml version="1.0" encoding="ISO-8859-1"?>

<catalog>

<cd country="USA">

<title>Empire Burlesque</title>

<artist>Bob Dylan</artist>

<price>10.90</price>

</cd>

<cd country="UK__time">

<title>Hide your heart</title>

<artist>Bonnie Tyler</artist>

<price>9.90</price>

</cd>

<cd country="UK">

<title>Hide your heart</title>

<artist>Bonnie Tyler</artist>

<price>9.90</price>

</cd>

<cd country="USA">

<title>Greatest Hits</title>

<artist>Dolly Parton</artist>

<price>9.90</price>

</cd></catalog>

</catalog>

定位节点

XML 是树状结构,类似档案系统内数据夹的结构,XPath 也类似档案系统的路径命名方式。不过 XPath 是一种模式(Pattern),可以选出 XML 档案中,路径符合某个模式的所有节点出来。

1)要选 catalog 底下的 cd 中所有 price 元素可以用:

/catalog/cd/price

如果 XPath 的开头是一个斜线(/)代表这是绝对路径。如果开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。

2)选出文件中所有叫做 cd 的元素(在树中的任何层级都会被选出来):

//cd

使用星号(Wildcards,*)可以选择未知的元素。

3)选出/catalog/cd 的所有子元素:

/catalog/cd/*

4)选出所有 catalog 的子元素中,包含有 price 作为子元素的元素。

/catalog/*/price

5)选出有两层父节点,叫做 price 的所有元素。

/*/*/price

6)选择出文件中的所有元素。

//*

要注意的是,想要存取不分层级的元素,XPath 语法必须以两个斜线开头(//),想要存取未知元素才用星号(*),星号只能代表未知名称的元素,不能代表未知层级的元素。

选择分支

使用中括号可以选择分支。

1)从 catalog 的子元素中取出第一个叫做 cd 的元素。XPath 的定义中没有第0元素

/catalog/cd[1]

2)选择 catalog 中的最后一个 cd 元素: XPath 没有定义 first() 这种函式,用上例的 [1]就可以取出第一个元素。

/catalog/cd[last()]

3)选出含有 price 子元素的所有/catalog/cd 元素。

/catalog/cd[price]

4)选出 price 元素的值等于10.90的所有/catalog/cd 元素

/catalog/cd[price=10.90]

5)选出 price 元素的值等于10.90的所有/catalog/cd 元素 的 price 元素

/catalog/cd[price=10.90]/price

选择一个以上的路径

使用 Or 操作数(|)就可以选择一个以上的路径

1)选择所有 title 以及 artist 元素

//title | //artist

2)选择所有 title 以及 artist 以及 price 元素

//title | //artist | //price

选择属性

在XPath的属性。除了选择元素以外,也可以选择属性,属性都是以@开头。

1)选择文件中所有叫做 country的属性。

//@conutry

2)选择所有含有country 这个属性的 cd元素。

//cd[@country]

3) 选择出country属性值为UK的cd元素

//country[@country=='UK']

部分匹配

有些属性的值具有一定的规律,例如上面的UK就是前缀,一部分是不变的。也可以用start-with

1)定位属性值前缀为UK_的元素

//cd[containers(@country,'UK_')]

//cd[start-with(@country,'UK_')]

这是在某个文档里面学习来的,感觉简单又易上手,故摘录于此。

简单的XPath入门的更多相关文章

  1. 一个简单的iBatis入门例子

    一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import ...

  2. linux systemd 从简单的例子入门

    linux systemd 从简单的例子入门 网上很多相关链接,一上来就给一大堆命令和讲解,让人头都大. 我们希望有一个service(服务),让它在开机启动的时候就执行. 用 root 登陆以后: ...

  3. 超简单!pytorch入门教程(五):训练和测试CNN

    我们按照超简单!pytorch入门教程(四):准备图片数据集准备好了图片数据以后,就来训练一下识别这10类图片的cnn神经网络吧. 按照超简单!pytorch入门教程(三):构造一个小型CNN构建好一 ...

  4. Mysql数据库的简单介绍与入门

    Mysql数据库的简单介绍与入门 前言 一.下载与安装 1.下载 官网下载MYSQL5.7.21版本,链接地址https://www.mysql.com/downloads/.下载流程图如下: 找到M ...

  5. 互联网金融爬虫怎么写-第一课 p2p网贷爬虫(XPath入门)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 相关教程: 手把手教你写电商爬虫-第一课 找个软柿子捏捏 手把手教你写电商爬虫-第二课 实战尚妆网分页商品采集爬虫 手把手教你写电商爬虫-第三课 ...

  6. 最简单的Github入门基础

    起因是小伙伴分享给我github上的一个FQ工具,让我看实现过程.于是,就由关键字"github"搜索开始. 一言之,是个开源的SVN.和CVS.SVN类似,但是,里面有千千万万程 ...

  7. 前端们,gulp该用起来了,简单的demo入门——gulp系列(一)

    gulp.grunt前端自动化工具,只有用过才知道多么重要. 它们问世这么久了?你真的用过吗? 写个简单的less.watch任务的demo分享———— 1.准备: 安装全局node.npm,这个教程 ...

  8. 一个最简单的Dubbo入门框架

    Dubbo背景和简介 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 1.单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本 ...

  9. 最简单的STM32入门教程----闪烁LED

    本文讲述的是如何从零开始,使用keil建立一个简单的STM32的工程,并闪烁LED灯,给小白看. 第零步,当然首先你得有一个STM32的板子,其IO口上接了一个LED... 第一步,建立一个文件夹0. ...

随机推荐

  1. Android Studio快速开发之道(各种语法糖)

    现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. Post ...

  2. MySQL 多实例给root用户创建密码

    DB:5.5.14 OS:CentOS 6.3 安装多实例MySQL数据库,安装完成后默认无密码,一次性给所有实例的root账户创建密码: #!/bin/bash for i  in {3361..3 ...

  3. Android之EditText

    EditText 属性介绍: maxLength:设置最大输入字符数. hint:设置空白提示文字. textColorHint:设置空白提示文字的颜色. enabled:设置是否可编辑(可以获得焦点 ...

  4. php配置步奏

    web运行大致流程 浏览器输入地址,回车(发送请求) 根据规则找到对应web服务器.规则如下: 首先在本机hosts文件中找对应IP 如果hosts中没有找到,则到互联网上找对应IP 如果还 ...

  5. Spiral Matrix II

    Spiral Matrix II Given an integer n, generate a square matrix filled with elements from 1 to n2 in s ...

  6. notifyDataSetChanged listview内容没更新的问题

    如红色部分所示,需在Adapter添加setData方法,当 listData中数据更改后,调用setData,为Adapter设置新的数据,此时调用notifyDataSetChanged() 就可 ...

  7. switch..case函数的基础使用一

    基本作用:switch中的参数与case的值进行比对,相等则进入case. JDK1.7 switch支持int.Integer.String类型 package com.my.test; impor ...

  8. Flex 教程(1)-------------控件拖动

    今天和大家分享下关于在Flex中 针对控件的拖动开发. 1.需要在 .mxml文件中编写一个Button按钮 如下代码: <s:Button id="button1" lab ...

  9. 2-Highcharts曲线图之折线图

    示例图片,在网上下载一张图片如图:其中数据自定义 引入上节模版配置  在script标签中写代码:具体代码如下   信息将在代码中解释. 分析:“五省收益趋势”是标题: x坐标为[2011年-2016 ...

  10. uva 1423 拓扑排序

    刘书上例题  拓扑排序 #include <cstdio> #include <cstdlib> #include <cmath> #include <map ...