我所认识的XPath

实例demo

测试demo所需要xml测试数据

<?xml version="1.0" encoding="iso-8859-1"?>
<bookstore>
  <book category="COOKING">
    <title lang="en">Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book category="CHILDREN">
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="WEB">
    <title lang="en">XQuery Kick Start</title>
    <author>James McGovern</author>
    <author>Per Bothner</author>
    <author>Kurt Cagle</author>
    <author>James Linn</author>
    <author>Vaidyanathan Nagarajan</author>
    <year>2003</year>
    <price>49.99</price>
  </book>
  <book category="WEB">
    <title lang="en">Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
    <price>39.95</price>
  </book>
</bookstore>

测试demo HTML页面结构

    <div id="divResult">这是答案区域</div>
    <hr />
    <input id="txt" type="text" value="/bookstore/book/title" />
    <input id="btn" type="button" value="获得结果" />

测试demo js代码

        /*
        *@desc:加载xml文件
        */
        function loadXMLDoc(path) {
            if (window.XMLHttpRequest) {// code for IE
                xhttp = new XMLHttpRequest();
            }
            else {// code for Mozilla, Firefox, Opera, etc.
                xhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xhttp.open("GET", path, false);
            xhttp.send("");
            return xhttp.responseXML;//返回xml结果
        }

        /*
        *@desc:通过xpath路径来获得相应的xml结果
        */
        function getXmlResultByPath(path) {
            var xml = loadXMLDoc("books.xml"),
                arrResult = [];

            // code for IE
            if (window.ActiveXObject) {
                var nodes = xml.selectNodes(path);
                for (i = 0; i < nodes.length; i++) {
                    if (nodes[i].childNodes[0] == undefined) {
                        arrResult.push(nodes[i].childNodes[0].nodeValue);
                    } else {
                        arrResult.push(nodes[i].nodeValue);
                    }
                }
            }
                // code for Mozilla, Firefox, Opera, etc.
            else if (document.implementation && document.implementation.createDocument) {
                var nodes = xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);
                var result = nodes.iterateNext();
                while (result) {
                    if (result.childNodes[0] == undefined) {
                        arrResult.push(result.nodeValue);
                    } else {
                        arrResult.push(result.childNodes[0].nodeValue);
                    }
                    result = nodes.iterateNext();
                }
            }
            return arrResult.join(‘,‘);//结果以逗号分隔
        }

        window.onload = function () {
            btn.onclick = function () {
                divResult.innerHTML = getXmlResultByPath(document.getElementById(‘txt‘).value);
            }
        }

XPath简介

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

简单一点的说,xpath就是:

  • XPath 使用路径表达式在 XML 文档中进行导航
  • XPath 包含一个标准函数库
  • XPath 是 XSLT 中的主要元素
  • XPath 是一个 W3C 标准

XPath术语

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

就如上面测试的xml文件为例

<bookstore> (文档节点)
<author>J K. Rowling</author> (元素节点)
lang="en" (属性节点)

2、基本值(或称原子值,Atomic value):无父或无子的节点。

路径表达式

最基本的路径表达式

对上面最基本的表达式做的实例如下:

如果我们需要查找某个特定的节点或者包含某个指定的值的节点,这就需要谓语表达式了。谓语被嵌在方括号中。

来看一些实例:

XPath轴

轴可定义相对于当前节点的节点集。

在Xpath中,位置路径可以是绝对的,也可以是相对的。绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割。

那么步一般包括:

  1. (axis):定义所选节点与当前节点之间的树关系
  2. 节点测试(node-test):识别某个轴内部的节点零个或者更多
  3. 谓语(predicate):更深入地提炼所选的节点集

我们来看一下步的语法

下面介绍一下有于轴的实例,大家可以用这些实例在我的那个demo里面进入测试来深入了解xpath

时间: 2024-10-09 09:44:02

我所认识的XPath的相关文章

Scrapy XPath语法

selectors = response.xpath('[exp]') 返回所有符合exp的语句Selector列表 data = response.xpath('[exp]')[0].extract() 返回Selector列表第一项的内容 '/html/head' 从根节点匹配 '//td/p' 从任意节点匹配 '//td/p/../..' 从任意节点匹配上两级 '//p/a/text()' 匹配文本内容 '//p/a[@colspan="2"]' 匹配属性符合条件 '//p/a/

XPATH 查找指定Class 元素

毕竟XPath 可以比较迅速的从格式化的html查找解析相应的元素. 比较正规的网站布局,可以通过 chrome 的调试器 直接复制XPATH 路径.如图: 但是呢这种方法可能实现不了效果,得不到正确搜寻的值集合. 如何通过xpath 来查找一个 指定 class='xxx'的元素的内容呢. DocumentNode.SelectNodes("//div[@class='mainArea']/ul/li"); 大家可以 通过 如此: //div[@class='mainArea']的意

实验:关于XPath中的13个轴

XSLT使用XPath来找寻XML文档中的信息,这几天在学习XSLT的找寻路径过程中,写了下面这个例子,来加深我对XPath中各个轴的概念的理解 测试用的XML文档和XSLT文档 XML文档:LogReport.xml <?xml version="1.0" encoding="gb2312"?> <?xml-stylesheet type='text/xsl' href='LogReport.xslt'?> <LogReport Cr

为UiAutomatorViewer添加xpath支持

UiAutomatorViewer是Android SDK自带的测试工具,用来查看手机或模拟器上的界面元素,小巧,简单,开箱即用,十分方便.美中不足之处在于,它不能获取界面元素的xpath. 写自动化测试脚本时,xpath是一种非常方便的定位方式.Appium等一些成熟的工具框架可以获取到界面元素xpath,但使用起来稍有点重量级.那么是否也可以给UiAutomatorViewer添加xpath支持呢? 答案是肯定的. 首先下载UiAutomatorView源代码,我用的地址是https://a

C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

转自原文C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子) 阅读目录 1.HtmlAgilityPack简介 2.XPath技术介绍与使用 3.采集天气网站案例 4.资源 第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel,是真尼玛的累,虽然那个时候C#还很菜,也想能不能通过程序来批量获取(所以平时想法要多才好).几

XPath语法 在C#中使用XPath示例

XPath可以快速定位到Xml中的节点或者属性.XPath语法很简单,但是强大够用,它也是使用xslt的基础知识. 示例Xml: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?xml version="1.0" encoding="utf-8" ?> <pets>   <cat color="black"

Python 2.7_利用xpath语法爬取豆瓣图书top250信息_20170129

大年初二,忙完家里一些事,顺带有人交流爬取豆瓣图书top250 1.构造urls列表 urls=['https://book.douban.com/top250?start={}'.format(str(i) for i in range(0, 226, 25))] 2.模块 requests获取网页源代码 lxml 解析网页 xpath提取 3.提取信息 4.可以封装成函数 此处没有封装调用 python代码: #coding:utf-8 import sys reload(sys) sys.

XML.04-dom4j和XPath

body,td { font-family: calibri; font-size: 10pt } XML.04-dom4j和XPath dom4j的基本使用 XPath 啥是XPath XPath语法 路径表达式 谓语 通配符 选取若干路径 Dom4j对XPATH的支持 下载对应的jar包,导入到对应的工程中 对于对于的web项目,复制dom4j-1.6.1.jar到 WebRoot – WEB-INF – lib里面 对于java项目:新建source folder–>复制jar包–>右键

xPath技术

1.xPath的作用:快速获取所需要的节点对象. 2.在Dom4j中如何使用xPath技术? (1)导入xPath支持的jar包. jaxen-1.1-beta-6.jar (2)使用方法 List<Node> selectNodes("xPath表达式");//查询多个节点对象 Node selectSingleNode("xPath表达式");//查询一个节点对象 3.语法 /      绝对路径      表示从xml的根位置开始或子元素(一个层次