XPath快速解析XML

| 收藏本文 下载本文 作者:一鸭一呀哟

下面是小编收集整理的XPath快速解析XML(共含2篇),供大家参考借鉴,欢迎大家分享。同时,但愿您也能像本文投稿人“一鸭一呀哟”一样,积极向本站投稿分享好文章。

XPath快速解析XML

篇1:XPath快速解析XML

为什么要使用XPATH,上一篇博客查询越靠近下面单词,时间会越长,超过2s就不太好了,XPAth就是用来提高解析XML速度的,还可以解析html,效率也是不错的!

分别查询下列信息

代码:<?www.2cto.com/kf/ware/vc/“ target=”_blank“ class=”keylink“>vcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ==”brush:sql;“>

xpath如何不考虑路径的层次,来查询某个节点

比如我们刚才严格层次查询 /bookstore/book/title

现在我们加了一个,

<?php$xml = new DOMDocument('1.0','utf-8');$xml->load('book.xml');$xpath = new DOMXPATH($xml);$sql = '/bookstore/book[last]/title';$rs = $xpath->query($sql);// 只能查到书名的title//echo $rs->item(0)->nodeValue; // 思考 ,如何查询所有的title,不考虑层次关系?$sql = '/title'; // 这样不行,这样查的是根节点下的title,而根节点下没有title/*/a/b,这说明,a,b就是父子关系,而如果用/a//b,这样说明a只是b的祖先就行,忽略了层次*/// 不分层次,查出所有的title/*$sql = '//title';foreach($xpath->query($sql) as $v) { echo $v->nodeValue,'

';}*//*$sql = '//title[2]'; // 这样又理解成ab,查询所有相邻的title节点,且第2个foreach($xpath->query($sql) as $v) { echo $v->nodeValue,'

';}*/

上面是简单应用,来改善上篇博客效率问题

<?php// 接收单词并解析XML查询相应的单词$word = isset($_GET['word'])?trim($_GET['word']):'';if(empty($word)) { exit('你想查啥?');}// 解析XML并查询$xml = new DOMDocument('1.0','utf-8');$xml->load('./dict.xml');/*$namelist = $xml->getElementsByTagName('name');$isfind = false;foreach($namelist as $v) { if($v->nodeValue == $word) { //print_r($v); echo $word,'

'; echo '意思:',$v->nextSibling->nodeValue,'

'; echo '例句:',$v->nextSibling->nextSibling->nodeValue,'

'; $isfind = true; break; }}if(!$isfind) { echo 'sorry';}*/// 接下来用xpath来查询词典$xpath = new DOMXpath($xml);// 查询/dict下的word,且name=$word的节点下面的/name节点$sql = '/dict/word[name=”' . $word . '“]/name'; //echo $sql;$words = $xpath->query($sql);if($words->length == 0) { echo 'sorry'; exit;}// 查到了$name = $words->item(0);echo $word,'

';echo '意思:',$name->nextSibling->nodeValue,'

';echo '例句:',$name->nextSibling->nextSibling->nodeValue,'

';

来解析一下的html

<?php/***====笔记部分====xpath是根据DOM标准来查询,html也是DOM,也能查,岂只是xml***/$html = new DOMDocument('1.0','utf-8');$html->loadhtmlfile('dict.html');$xpath = new DOMXPATH($html);$sql = '/html/body/h2';echo $xpath->query($sql)->item(0)->nodeValue,'

';// 查询id=”abc“的div节点$sql = '//div[@id=”abc"]';echo $xpath->query($sql)->item(0)->nodeValue;// 分析第2个/div/下的p下的相邻span的第2个span的内容$sql = '//div/p/span[2]';echo $xpath->query($sql)->item(0)->nodeValue;

篇2:教你用Oracle解析函数快速检查序列间隙

数据库表格中经常用到值序列,无论是作为数据本身自然产生的,还是由Oracle 的序列对象分配的,它的目的就是用一个唯一的、递增的数字给每一行编号。

在编号的过程中,产生间隙的原因多种多样。如果一个存储过程从一个序列中挑选某个数字,定为本地变量,但是从来不用它,这个数字就丢失了。它将不能再返回到原序列中,结果就造成数值序列中存在一个间隙。关系型数据库模型中不必担心这一点。但是有时候人们在意这一点,这些人想知道是哪些数字丢失了。

一个显而易见的方式就是用PL/SQL,在已排序指针中循环,并且用一个本地变量进行存储,把每一个数值与其前一行的进行比较。这种方法的问题在于效率很低,速度很慢。另外一个不常用的解决办法就是对表格做一个自合并,实质也就是用某种标准使每一行与其前一行相匹配。这种方法很难编写代码。

Oracle的解析函数为检查间隙提供了一种要快捷得多的方法。它们使你在使用完整的、面向集合的SQL处理的同时,仍然能够看到下一个行(LEAD)或者前一行(LAG)的数值。

下面是这些函数的格式:

{LEAD | LAG} (value_expression, offset, default) OVER ([PARTITION BY expr] ORDER BY expr)

通常,value_expression是一个你想要检索的数据列,

参数offset是指你想要往前或往后读取的行数,default则是到达任意一个分区的开头或者结尾(即没有与之相匹配的行)时返回的数值。

脚本是一系列从工作地传感器自动收集来的数据。传感器装置自动给每一个测量值编上号,我们要找出结果有没有缺失。

我们将数据按照测量值编号排序,运用LAG函数,把偏移量设置为1,使得每一行与其前一行对应起来。第一行将没有对应量,所以相应地,将返回默认值0。因为间隙不可能发生在第一行,所以我们通过之前要求测量值大于0而将其删除。

剩下的就是一组虚拟的行,显示的是前一行的测量值编号(“before_gap”)和当前行的测量值编号(“after_gap”)。如果两者之差大于1,就说明这两行之间存在间隙。

同时也要注意到,WITH子句在查询开始的时候把解析子查询命名为“aquery”。那么我们就可以在主SELECT 语句中的WHERE 子句中访问“aquery”中的数列。

快速跑教案

《快速跑》说课稿

高中英语快速学习方法

简历:快速消费品

快速记忆学习方法

种子解析

简历解析

会议纪要解析

高考快速复习方法建议

快速阅读的训练方法

XPath快速解析XML(精选2篇)

欢迎下载DOC格式的XPath快速解析XML,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档