zoukankan      html  css  js  c++  java
  • DOM解析XML

    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对象来解释XML 1:要把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 -->页面的html
    2:正则分析视频地址
    
    
    缺点:
    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> <h1>这个地址须要支持html5的浏览器才干看,如chrome,火狐,IE9以上</h1> <form method="post"> <p> 土豆地址:<input type="text" name="tudou" /> </p> <p> <input type="submit" value="获取地址" /> </p> </form> <p> 无广告地址:<?php echo $noad; ?> </p> </body> </html>




  • 相关阅读:
    Hibernate中的HQL
    hibernate配置数据库连接池三种用法
    Hibernate的延迟检索和立即检索
    Hibernate关系映射中的注解
    Hibernate的多种关系映射(oto、otm、mtm)
    自然主键和代理主键的区别
    Hibernate的xml方法配置和操作代码
    Hibernate简介
    VirtualBox从USB设备(PE)启动图文教程
    属性动画
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7372749.html
Copyright © 2011-2022 走看看