博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP中XPATH 实现xml及html文件快速解析(附xml做小型数据库实现六级单词快速查询实例)...
阅读量:5293 次
发布时间:2019-06-14

本文共 2974 字,大约阅读时间需要 9 分钟。

PHP中XPATH 实现xml及html文件快速解析(附xml做小型数据库实现六级单词快速查询实例)

一、XPATH简单入门

XPATH ,XQUERY 专门查询XML语言,查询速度快

 

使用方法:

(1)创建DOM工具,并且加载 xml文件

       $xml = new  DOMDocument('1.0','utf-8');

       $xml -> load('./dict.xml');             

注:若是对html文件进行快速解析, 同样的道理

       此处使用   loadhtmlfile (‘dict.html’);

 

(2)创建xpath解析工具

       $xpath = new DOMXPATH($xml);      

(3)编写xpath查询语句

       $sql = '/dict/word[name="'.$word.'"]/name';

注:若是对html文件进行快速解析

       $sql = ‘/html/body/div/h2’;              //得到body下的div下面的h2标签下的内容

(4)查询语句,返回结果

$words = $xpath->query($sql); 

下面是查询语句表的一些语法

 

二、xml做小型数据库实现六级单词快速查询实例

 

初步版本:缺点:查询速度慢

//接收单词并解析XML查询相应的单词

$word = isset($_GET['word'])?trim($_GET['word']):'';

if(empty($word)){

       exit("I am sorry,I can't catch the word!");

}else{

       $xml = new  DOMDocument('1.0','utf-8');

       $xml -> load('./dict.xml');

// * DOM实现解析并查询

       $namelist = $xml->getElementsByTagName('name');

       $value = array();

       $isfind = false;

       foreach($namelist as $v){

              if(($v->nodeValue) == $word){

                     //print_r($v);

                     echo $word,"<br/>";

                     echo "Meaning:",$v->nextSibling->nodeValue,"<br/>";

                     echo "Example:",$v->nextSibling->nextSibling->nodeValue,"<br/>";               

  //$value['Word'] = $word;

//$value['Meaning'] = $v->nextSibling->nodeValue;

//$value['Example'] = str_replace('/r/n',"<br/>",$v->nextSibling->nextSibling->nodeValue);     

                     $isfind = true;

                     break;

              }

       }

       if(!$isfind)

              echo "<br/><h3>Sorry,the word is not in the directory</h3>";

 

使用XPATH改进版本:速度快

使用实例:

$word = isset($_GET['word'])?trim($_GET['word']):'';

if(empty($word)){

       exit("I am sorry,I can't catch the word!");

}else{

$xml = new  DOMDocument('1.0','utf-8');

$xml -> load('./dict.xml');

$xpath = new DOMXPATH($xml);                    

//查询dict下面的word,并且name=$word的节点 下的//name节点

$sql = '/dict/word[name="'.$word.'"]/name';

$words = $xpath->query($sql);

if($words->length == 0){  //如果没有这个单词

              echo "<br/><h3>Sorry,the word is not in the directory</h3>";

              exit;

}

              //走到这一步,说明查到了

Echo  "<b>Word:</b>","&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;","<B>$word

</B>","<br/>";

echo "<b>Meaning:</b>",$name->nextSibling->nodeValue,"<br/>";

echo "<b>Example:</b>",$name->nextSibling->nextSibling->nodeValue,"<br/>";

//$value['Word'] = $word;

//$value['Meaning'] = $name->nextSibling->nodeValue;

//$value['Example'] = str_replace('/r/n',"<br/>",$name->nextSibling->nextSibling->nodeValue); 

}

附上HTML文件代码:
 

 
<html>
        <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>dict</title>
        </head>
        <style>
            //style="text-align:center;"}
        </style>
        <body>
                <div >
                <h2>XML做小型数据库实现在线词典</h2>
                    <!--        <form action="dict.php">   -->
                <form>
                    <p>单词:<input type='text' name='word'/></p>
                    <p><input type="submit" value="查询"/></p>  
                </form>
                <p> 
                <?PHP if(isset($value['Word'])) {
                       foreach($value as $k=>$v){  ?>
                            <b ><?php echo $k.": ";?></b>
                            <p ><?php echo $v;?></p>
                            <br/>
                <?php
                      }
                }?>     
                </p>
        </div>
    </body>
</html>
 

 

结果如果所示:

图片 

 

 

三、使用XPATH快速查询html文件实例

$html = new  DOMDocument('1.0','utf-8');

$html -> loadhtmlfile('./dict.html');

$xpath= new DOMXPATH($html);                    

 

$sql = ‘/html/body/div/h2’;        //得到body下的div下面的h2标签下的内容

Echo $xpath->query($sql)->item(0)->nodeValue;             

 

转载于:https://www.cnblogs.com/lihaiyan/p/4274347.html

你可能感兴趣的文章
jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space
查看>>
ExtAspNet v3.1.8 发布了
查看>>
(分享)C# 绘制统计图(柱状图, 折线图, 扇形图)
查看>>
html学习笔记二
查看>>
CentOS 6.6安装配置CVS
查看>>
测试工具文件4. 数据分析——定义analyseXML
查看>>
【转载】递归算法详解
查看>>
poj1852 Ants
查看>>
数据处理之文件读写
查看>>
Openssl生成证书
查看>>
工具使用及环境搭建
查看>>
单例模式 分析 代码优化
查看>>
[心情琐记]-为什么我选择做一个程序员?【谨以此文献给初入技术之路的纯白少年】...
查看>>
DBCC CHECKDB 数据库或表修复
查看>>
PHP的分页
查看>>
ZOJ 3791 An Easy Game [组合计数]
查看>>
DOM
查看>>
AOJ/搜索与递归及分治法习题集
查看>>
express
查看>>
iOS视图弹出、平移、旋转、翻转、剪切等变换效果实现
查看>>