首页 > 开发 > XML > 正文

DOM解析XML

2020-03-22 18:38:10
字体:
来源:转载
供稿:网友
  • DOM解析XML和js类似,懂得js的话很随意就读取出相应值了。

    DOM所有元素都是节点,这点不要忘啦!

    大概是这样:

    XML文件:

    <?xml version="1.0" encoding="utf-8"?><bookstore><book>	<title>天龙八部</title>	<price>28.8</price></book><book>	<title>十八歌诗集</title>	<price>29.9</price></book></bookstore>
    进行读取:

    <?php/***====笔记部分====XML的DOM解析document.getElementsByTagName();childNodes()这2个方法,是不是有点熟悉?答:是的,在js,java里也有为什么?答:因为XML是一种严格的文档格式,有其自身的标准,解析XML,也有其标准,叫DOM标准,我们所使用的html,xml,都遵循DOM标准,也就是为什么我们看到上面的两个函数那么熟悉.因为无论是PHP,java,c,js解析DOM树,遵循的同样的DOM标准.***//***如何通过php的DOM对象来解释XML1:要把XML文件读入进来,形成一个XML文档对象 <--对应js--> document对象2:再通过getElementsByTagName('标签名')得到一组节点<--js--> document.getElementsByTagName()3:再把2步中,得到一组对象,取得其某一个,就得到了具体的结点.***/// 1:创建DOM解析对象$dom = new DOMdocument('1.0','utf-8');/*DOMdocument Object有什么用?答:他可以把你的XML文件加载入内存并分析你就可以利用Object分析XML了*///print_r($dom); // DOMDocument Object ( ) //echo '<br />';// 2:载入XML文档$dom->load('./01.xml');  // 得到文档对象// 3:得到title节点列表/*分析,title节点有很多,因此得到的是"节点列表对象"*/$ts = $dom->getElementsByTagName('title');//print_r($ts); // DOMNodeList Object ( )/*DOMNodelist有1个属性: length 代表取得的节点数量有1个方法: item(N) 代表取得第N个节点*//*echo '我们得到了',$ts->length,'个书名<br />';echo '第一个节点是'; print_r($ts->item(0));*/// "天龙八部"是一个文本节点,而且是<title></title>的子节点$title0 = $ts->item(0);print_r($title0->childNodes); // 打印结果 又是一个列表对象(子节点列表)echo $title0->childNodes->length,'个子节点<br />';$text = $title0->childNodes->item(0);print_r($text);echo $text->wholeText;echo '<hr />';echo $dom->getElementsByTagName('title')->item(1)->childNodes->item(0)->wholeText;echo '<hr />';echo $dom->getElementsByTagName('title')->item(1)->nodeValue;

    就这样搞定啦!

    还记得上次是用字符串截取获得dom文档,这次进行改正

    <?php/***====笔记部分====目标:获取土豆网的[无广告]视频地址一般的小偷程序:1:file_get_contents/curl -->页面的html2:正则分析视频地址缺点:1:慢,html页面比较大,有大量的信息是"杂质"信息2:如果页面改版了,采集规则可能失效.我们的采集办法:利用土豆的API,得到XML信息1:XML是纯数据,内容少,获取快2:纯数据,比如标题,时长等,这些是不会变的. 很难失效.目前,各大网站都有自己的开放接口, application programing interface,应用程序接口利用网站的API,就可查询信息如豆瓣的书籍信息,土豆的视频信息.....$key = 1f3918053ff6bc04***/error_reporting(E_ALL & ~E_NOTICE);if($tudou = $_POST['tudou']) {        $itemcode =  basename($tudou);    $key = '1f3918053ff6bc04';    $api = 'http://api.tudou.com/v3/gw?method=item.info.get&appKey=' . $key . '&format=xml' . '&itemCodes=' . $itemcode;    // echo $api;    /*      echo $api,得到的是一个XML文档,内容是视频的标题,时长,封面等等信息      接下来我们要做的是用PHP把XML的各节点信息解析出来      知识点: DOMDocument类来解析      当前,我们暂时不用XML解析 ,而是直接用字符串操作来得到地址    */    echo $api;    $dom = new Domdocument('1.0','utf-8');    $dom->load($api);    $noad = $dom->getElementsByTagName('html5Url')->item(0)->nodeValue;}?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN"><head><title>新建网页</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="description" content="" /><meta name="keywords" content="" /><script type="text/javascript"></script><style type="text/css"></style></head>    <body>        <pre>            第28集http://www.tudou.com/programs/view/Dc6P2egJA4w/        </pre>        <h3>这个地址需要支持html5的浏览器才能看,如chrome,火狐,IE9以上</h3>        <form method="post">            <p>            土豆地址:<input type="text" name="tudou" />            </p>            <p>             <input type="submit" value="获取地址" />            </p>        </form>                <p>        无广告地址:<?php echo $noad; ?>        </p>    </body></html>
    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表