下面是小编收集整理的XPath快速解析XML(共含2篇),供大家参考借鉴,欢迎大家分享。同时,但愿您也能像本文投稿人“一鸭一呀哟”一样,积极向本站投稿分享好文章。
为什么要使用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]'; // 这样又理解成
';}*/
上面是简单应用,来改善上篇博客效率问题
<?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;
数据库表格中经常用到值序列,无论是作为数据本身自然产生的,还是由Oracle 的序列对象分配的,它的目的就是用一个唯一的、递增的数字给每一行编号。
在编号的过程中,产生间隙的原因多种多样。如果一个存储过程从一个序列中挑选某个数字,定为本地变量,但是从来不用它,这个数字就丢失了。它将不能再返回到原序列中,结果就造成数值序列中存在一个间隙。关系型数据库模型中不必担心这一点。但是有时候人们在意这一点,这些人想知道是哪些数字丢失了。
一个显而易见的方式就是用PL/SQL,在已排序指针中循环,并且用一个本地变量进行存储,把每一个数值与其前一行的进行比较。这种方法的问题在于效率很低,速度很慢。另外一个不常用的解决办法就是对表格做一个自合并,实质也就是用某种标准使每一行与其前一行相匹配。这种方法很难编写代码。
Oracle的解析函数为检查间隙提供了一种要快捷得多的方法。它们使你在使用完整的、面向集合的SQL处理的同时,仍然能够看到下一个行(LEAD)或者前一行(LAG)的数值。
下面是这些函数的格式:
通常,value_expression是一个你想要检索的数据列,
参数offset是指你想要往前或往后读取的行数,default则是到达任意一个分区的开头或者结尾(即没有与之相匹配的行)时返回的数值。
脚本是一系列从工作地传感器自动收集来的数据。传感器装置自动给每一个测量值编上号,我们要找出结果有没有缺失。
我们将数据按照测量值编号排序,运用LAG函数,把偏移量设置为1,使得每一行与其前一行对应起来。第一行将没有对应量,所以相应地,将返回默认值0。因为间隙不可能发生在第一行,所以我们通过之前要求测量值大于0而将其删除。
剩下的就是一组虚拟的行,显示的是前一行的测量值编号(“before_gap”)和当前行的测量值编号(“after_gap”)。如果两者之差大于1,就说明这两行之间存在间隙。
同时也要注意到,WITH子句在查询开始的时候把解析子查询命名为“aquery”。那么我们就可以在主SELECT 语句中的WHERE 子句中访问“aquery”中的数列。
★ 快速跑教案
★ 《快速跑》说课稿
★ 简历:快速消费品
★ 快速记忆学习方法
★ 种子解析
★ 简历解析
★ 会议纪要解析