?php// 详细学习可以参考w3" /> ?php// 详细学习可以参考w3">
首页 数据库 mysql教程 XPath快速解析XML

XPath快速解析XML

Jun 07, 2016 pm 04:10 PM
xml xpath 为什么 使用 快速 解析

为什么要使用XPATH,上一篇博客查询越靠近下面单词,时间会越长,超过2s就不太好了,XPAth就是用来提高解析XML速度的。还可以解析html,效率也是不错的! 分别查询下列信息 代码: vcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:sql;">?php// 详细学习可以参考w3

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

分别查询下列信息

\

代码:喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PC9wPgo8cHJlIGNsYXNzPQ=="brush:sql;">load('book.xml'); $xpath = new DOMXPATH($xml); /* $sql = 'xxx'; // 路径表达式 $xpath->query($sql); */ /* xpath的路径表达式如何写? xpath是从根节点到某个节点声经过的路径 */ // 查询book.xml下面的每本书的title // /bookstore/book/title /* $sql = '/bookstore/book/title'; $rs = $xpath->query($sql); print_r($rs); echo $rs->item(1)->nodeValue; */ // 查询book.xml下面book节点的下面的第2个title节点,哪来的第2个title节点? 这样写是不对的 /* $sql = '/bookstore/book/title[2]'; $rs = $xpath->query($sql); print_r($rs->length); */ // 查询bookestore下面的第2本书下面的title节点. /* $sql = '/bookstore/book[2]/title'; $rs = $xpath->query($sql); print_r($rs->item(0)->nodeValue); */ // 查询bookstore下面的book节点并且价格>40元 /* $sql = '/bookstore/book[price>40]/title'; $rs = $xpath->query($sql); echo $rs->item(0)->nodeValue; */ // 查询侠客行的价格 // /bookstore/下面的book,且title=='侠客行'的书的价格 $sql = '/bookstore/book[title="侠客行"]/price'; $rs = $xpath->query($sql); echo $rs->item(0)->nodeValue;
xpath如何不考虑路径的层次,来查询某个节点


比如我们刚才严格层次查询 /bookstore/book/title
现在我们加了一个,

<?php
$xml = new DOMDocument(&#39;1.0&#39;,&#39;utf-8&#39;);
$xml->load(&#39;book.xml&#39;);

$xpath = new DOMXPATH($xml);

$sql = &#39;/bookstore/book[last()]/title&#39;;
$rs = $xpath->query($sql);

// 只能查到书名的title
//echo $rs->item(0)->nodeValue; 


// 思考 ,如何查询所有的title,不考虑层次关系?
$sql = &#39;/title&#39;; // 这样不行,这样查的是根节点下的title,而根节点下没有title

/*
/a/b,这说明,a,b就是父子关系,而如果用/a//b,这样说明a只是b的祖先就行,忽略了层次
*/


// 不分层次,查出所有的title
/*
$sql = &#39;//title&#39;;
foreach($xpath->query($sql) as $v) {
    echo $v->nodeValue,&#39;<br />&#39;;
}
*/

/*
$sql = &#39;//title[2]&#39;; // 这样又理解成<title>a</title><title>b</title>,查询所有相邻的title节点,且第2个
foreach($xpath->query($sql) as $v) {
    echo $v->nodeValue,&#39;<br />&#39;;
}
*/
登录后复制

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

<?php
// 接收单词并解析XML查询相应的单词
$word = isset($_GET[&#39;word&#39;])?trim($_GET[&#39;word&#39;]):&#39;&#39;;

if(empty($word)) {
    exit(&#39;你想查啥?&#39;);
}


// 解析XML并查询
$xml = new DOMDocument(&#39;1.0&#39;,&#39;utf-8&#39;);
$xml->load(&#39;./dict.xml&#39;);


/*
$namelist = $xml->getElementsByTagName(&#39;name&#39;);

$isfind = false;

foreach($namelist as $v) {
    if($v->nodeValue == $word) {
        //print_r($v);
        echo $word,&#39;<br />&#39;;
        echo &#39;意思:&#39;,$v->nextSibling->nodeValue,&#39;<br />&#39;;
        echo &#39;例句:&#39;,$v->nextSibling->nextSibling->nodeValue,&#39;<br />&#39;;

        $isfind = true;
        break;
    }
}

if(!$isfind) {
    echo &#39;sorry&#39;;
}
*/






// 接下来用xpath来查询词典
$xpath = new DOMXpath($xml);

// 查询/dict下的word,且name=$word的节点下面的/name节点
$sql = &#39;/dict/word[name="&#39; . $word . &#39;"]/name&#39;; 
//echo $sql;
$words = $xpath->query($sql);

if($words->length == 0) {
    echo &#39;sorry&#39;;
    exit;
}


// 查到了
$name = $words->item(0);
echo $word,&#39;<br />&#39;;
echo &#39;意思:&#39;,$name->nextSibling->nodeValue,&#39;<br />&#39;;
echo &#39;例句:&#39;,$name->nextSibling->nextSibling->nodeValue,&#39;<br />&#39;;
登录后复制

来解析一下的html

<?php
/***
====笔记部分====
xpath是根据DOM标准来查询,
html也是DOM,
也能查,岂只是xml
***/


$html = new DOMDocument(&#39;1.0&#39;,&#39;utf-8&#39;);
$html->loadhtmlfile(&#39;dict.html&#39;);


$xpath = new DOMXPATH($html);
$sql = &#39;/html/body/h2&#39;;
echo $xpath->query($sql)->item(0)->nodeValue,&#39;<br />&#39;;


// 查询id="abc"的div节点
$sql = &#39;//div[@id="abc"]&#39;;
echo $xpath->query($sql)->item(0)->nodeValue;


// 分析第2个/div/下的p下的相邻span的第2个span的内容
$sql = &#39;//div/p/span[2]&#39;;
echo $xpath->query($sql)->item(0)->nodeValue;
登录后复制


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

H5页面制作是否需要持续维护 H5页面制作是否需要持续维护 Apr 05, 2025 pm 11:27 PM

H5页面需要持续维护,这是因为代码漏洞、浏览器兼容性、性能优化、安全更新和用户体验提升等因素。有效维护的方法包括建立完善的测试体系、使用版本控制工具、定期监控页面性能、收集用户反馈和制定维护计划。

没有H5,JS能运行吗? 没有H5,JS能运行吗? Apr 06, 2025 am 09:06 AM

JavaScript 是否可在无 HTML5 环境下运行?JavaScript 引擎自身可独立运行。在浏览器环境中运行 JavaScript 依赖 HTML5,因其提供加载和执行代码所需的标准化环境。HTML5 提供的 API 和特性对现代 JavaScript 框架和库至关重要。离开 HTML5 环境,许多 JavaScript 功能难以实现或无法实现。

为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? 为什么Flex布局中的紫色斜线区域会被误认为是'溢出空间”? Apr 05, 2025 pm 05:51 PM

关于Flex布局中紫色斜线区域的疑问在使用Flex布局时,你可能会遇到一些令人困惑的现象,比如在开发者工具(d...

为什么在Safari中自定义样式表能在本地网页生效,但在百度页面上却无法生效? 为什么在Safari中自定义样式表能在本地网页生效,但在百度页面上却无法生效? Apr 05, 2025 pm 05:15 PM

在Safari中使用自定义样式表的问题探讨今天我们来探讨一个关于Safari浏览器的自定义样式表应用问题。前端新手...

H5页面制作的优势有哪些 H5页面制作的优势有哪些 Apr 05, 2025 pm 11:48 PM

H5 页面制作的优势包括:轻量级体验,加载速度快,提升用户留存率。跨平台兼容性,无需针对不同平台适配,提升开发效率。灵活性和动态更新,无需审核,便于内容修改和更新。成本效益,开发成本比原生 App 低。

无法以 root 身份登录 mysql 无法以 root 身份登录 mysql Apr 08, 2025 pm 04:54 PM

无法以 root 身份登录 MySQL 的原因主要在于权限问题、配置文件错误、密码不符、socket 文件问题或防火墙拦截。解决方法包括:检查配置文件中 bind-address 参数是否正确配置。查看 root 用户权限是否被修改或删除,并进行重置。验证密码是否准确无误,包括大小写和特殊字符。检查 socket 文件权限设置和路径。检查防火墙是否阻止了 MySQL 服务器的连接。

为什么Edge浏览器中的特定div元素无法显示?如何解决这个问题? 为什么Edge浏览器中的特定div元素无法显示?如何解决这个问题? Apr 05, 2025 pm 08:21 PM

如何解决用户代理样式表导致的显示问题?在使用Edge浏览器时,项目中的一个div元素无法显示。经过查看,发�...

H5页面制作能做什么 H5页面制作能做什么 Apr 06, 2025 am 07:09 AM

H5页面制作不仅适用于创建简单的网页,还具有强大的功能,包括:动态交互:使用动画、视频和3D模型等元素,为用户提供沉浸式体验。移动友好:响应式设计确保在各种设备上提供最佳浏览体验。数据可视化:以直观的方式呈现数据,使用图表和地图等元素。游戏和交互式应用:开发轻量级游戏和互动应用,增强用户参与度。跨平台兼容性:基于HTML5、CSS3和JavaScript的组合,但兼容性仍然是一个挑战。性能优化:对于复杂页面,需要优化代码效率。安全性:需要防止安全漏洞,如

See all articles