PHP之AJAX,XML,JSON一揽子方案

来源:互联网 发布:php aes cbc解密乱码 编辑:程序博客网 时间:2024/05/18 21:05

PHP进阶Ajax,使用,Ajax发送get ,post请求,ajax操作xml,无刷新分页,取消缓存
一.什么是ajax
        Asynchronous  Javascript And  XML
        异步javascript 和xml 是一种可以与服务器进行(异步/同步)交互的一种浏览器的技术
    Ajax的作用     
        使用ajax的过程就是创建一个ajax对象,对象调用本身成员属性、成员方法的过程。
        优点:节省带宽,节省用户等待时间,用户体验好
    Ajax的特点:局部刷新,逐步加载
二.ajax使用
1. 创建ajax对象(xml核心技术)---主流浏览器方式
var xhr = new XMLHttpRequest();火狐、google、苹果safariopera包括IE7以上版本的浏览器
2、Ajax的核心对象:XMLHttpRequest
        属性:readyState//ajax对象的状态
                0:ajax对象已创建
                1: 已调用open方法
                2:已调用send方法
                3:返回部分数据
                4:返回所有数据
            responseText:返回值(字符串)
            responseXML:返回XML DOM对象
status服务器返回的状态码200,304,403,404,500
statusText服务器返回的状态文本信息
        方法成员
            abort()//停止当前请求
            open('get|post,url,[true,false]') 创建一个http请求
            send('get',null)或send('post',data); 请求执行
            setRequestHeader()
            onreadystatechange()事件属性
浏览器可以接收的信息ajax都可以接收,例如字符串、html标签、css样式内容、xml内容、json内容等等。
    <script type="text/javascript">
        function f1(){//ajax对服务器端发起请求
            //1创建ajax对象
            var xhr=new XMLHttpRequest();
            //4设置事件,感知readState的状态变化,进而获得服务器返回信息
            xhr.onreadystatechange=function(){
                if (xhr.readyState==4) {
                    document.write(xhr.responseText);
                }
            }
            //2创建一个新的http协议(请求)(打开浏览器、输入网址)
            //xhr.open(请求方式get/post,url地址[,同步false/异步true]);
            xhr.open('get','./Aptest.php?'+Math.random());
            //3把http请求给发送出去
            //xhr.send(null/post方式传送给服务器的数据)
            xhr.send(null);
        }
    </script>
<body>
    <h2>ajax对服务器发起请求和接收服务器返回信息</h2>
    <input type="button" value="触发" onclick="f1()">
</body>
3、Ajax发送GET请求的步骤
    1. 创建Ajax对象:new XMLHttpRequest
    2. 初始化Ajax对象:open()
    3. 发送请求:send()
    4. 判断状态,处理数据:onreadystatechange   readyState==4
4、Ajax发送POST请求的步骤
    1. 创建Ajax对象:new XMLHttpRequest
    2. 初始化Ajax对象:open()
    3. 设置请求头信息:setRequestHeader()
            content-type,application/x-www-form-urlencoded
例:xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
    4. 发送请求:send
    5. 判断状态, 处理数据:onreadystatechange      readyState==4
<script type="text/javascript">
        function checkname(){
            //ajax方式校验用户名 ,//A. 获得被校验的用户名信息
            var nm = document.getElementById('username').value;
            //对 & 、= 等符号需要进行特殊处理,否则产生歧义
            nm = encodeURIComponent(nm);//encodeURIComponent()可以对特殊符号进行处理
            //把需要传递的信息变为"请求字符串"格式,并设置为send()方法参数
            var info = "name="+nm+"&age=20";
            //B. ajax带着该名字信息去服务器端校验
            var xhr = new XMLHttpRequest();//一
            xhr.onreadystatechange = function(){//五
                if(xhr.readyState==4){
                    alert(xhr.responseText);
                }
            }
            //post方式传递数据是模拟form表单方式传递数据
            //form表单的数据实际是组织为xml格式传递给服务器端的
            xhr.open('post','./06.php?color=red');//二
            //设置http头协议,把传递的post //数据组织为xml格式
            //注意:setRequestHeader方法必须在open方法后边调用
            xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");//三
            xhr.send(info);//四
        }
</script>

三、发送带参数的请求
    GET请求:参数写在URL地址后面。2k,安全性低,地址栏提交
    POST请求:参数单独组织,通过send方法发送。数据大小理论无限制,安全性更高,form表单提交方式
ajaxget请求需要注意的两个地方: 
①在url地址后边以请求字符串(传递的get参数信息)形式传递数据。
 中文=&等特殊符号处理
=&符号在浏览器里边会与请求字符串的关键符号有混淆,避免歧义产生需要对其进行编码.
对特殊信息的处理:
在浏览器的地址栏里边传递一些特殊符号信息,会被误解,例如 &  =  空格  中文等。
①.在php里边可以函数 urlencode()/urldecode()对特殊符号进行编码、反编码处理
(url_encode()可以把中文转变为浏览器可以识别的信息。转变之后的信息具体为%号后接两个十六进制数)
②.在javascript里边可以通过encodeURIComponent ()对特殊符号等信息进行编码。
(经过以上红色函数编码的内容在服务器端可以正常接收,不需要反编码)
四、无刷新分页(详见例)
什么时候使用同步请求?
ajax绝大多数情况下进行异步请求,但是有的时候也要使用“同步请求”(其不能被取代)。例如页面有两部分内容,ajax请求内容正常的html内容输出,如果html的输出内容包括ajax请求的内容,就需要使得ajax请求完成了再进行html内容的输出,这样就要设置两者一前一后调用(而非同时调用),既要进行同步请求
    1、分页原理
        通过不同的url将页面参数解析成对应的SQL语句
            1.1、limit offset, num
            1.2、(current_page -1) * page_size = offset
                1.2.1、current_page: 当前的页码
                1.2.2、page_size: 每页显示的数目
                1.2.3、offset:偏移量
                1.2.4、page_size == num
    2、Ajax端
        发送带页面参数的GET请求
    3、PHP端
        根据页面参数解析SQL语句
        修改分页链接
五、ajax操作xml
    ajax负责请求xml  dom操作xml,详见天气预报案例5.1
     xml数据接收处理:getElementByTagName(),childNodes,length,tagName,nodeValue,nodeType
六、ajax缓存(针对IE浏览器)
    添加随机数xhr.open('get',',/10.php?'+Math.random());   
    设置header头//三条header语句是为兼容
header("Cache-Control:no-cache");
header("Pragma:no-cache");
header("Expires:-1");
5.1ajax+js实现xml的接收和处理(天气预报案例)
<script type="text/javascript">
        function f1(){
            //ajax请求xml信息回来 ,//dom处理xml信息(dom方式对xml的处理与html处理完全一致)
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function(){
                if(xhr.readyState==4){
                    //alert(typeof xhr.responseText); //以“字符串”形式返回xml信息
                    //以“xmldocment文档节点对象”形式返回xml信息,进而可以通过dom方式处理xml
                    //alert(typeof xhr.responseXML);// xml根节点的父级节点对象
                    //console.log(xhr.responseXML);//xmlDocument
                    var xmldom = xhr.responseXML;
                    //console.log(xmldom.firstChild);//<weather>
                    var citys = xmldom.getElementsByTagName('city');//三个city
                    //console.log(citys);//HTMLCollection[city, city, city]
                    //遍历当前citys[1]的"元素节点"对象
                    //getElementsByTagName()方法可以被“document”或“元素节点”对象调用
                    //for(var k in citys[1]){
                    //    console.log(k);
                    //}
                    var s = "";
                    for(var i=0; i<citys.length; i++){
                        var nm = citys[i].getElementsByTagName('name')[0].firstChild.nodeValue;
                        var tp = citys[i].getElementsByTagName('temp')[0].firstChild.nodeValue;
                        var wd = citys[i].getElementsByTagName('wind')[0].firstChild.nodeValue;
                        s += "城市:"+nm+"-温度:"+tp+"-风向:"+wd+"<br />";
                    }
                    document.getElementById('result').innerHTML = s;
                }
            }
            xhr.open('get','./09-weather.xml');
            xhr.send(null);
        }
        </script>
<body>
        <h2>ajax+js实现xml的接收和处理</h2>
        <input type="button" value="触发" onclick="f1()" />
        <div id="result"></div>
    </body>
<weather>
    <city>
        <name>北京</name>
        <temp>15~20</temp>
        <wind>北风</wind>
    </city>
    <city>
        <name>上海</name>
        <temp>18~22</temp>
        <wind>海风</wind>
    </city>
    <city>
        <name>深圳</name>
        <temp>19~25</temp>
        <wind>南风</wind>
    </city>
</weather>
PHP进阶-Ajax-Json,jQuery封装的ajax,无刷新提交表单文件进度条,地市三级联动
 json: javascript  object notation(javascript对象符号)
其是一种数据交换格式(之前的xml也是数据交换格式)
一、使用XML的方式传输数据
    通过responseXML返回DOM对象
    调用getElementsByTagName获取节点信息
    注意:需要找到文本节点         对于文本节点可以通过nodeValue访问
二、使用JSON的方式传输数据
    2.1 JSON格式的组织形式:“键-值”对 name:value,使用{}表示一个json对象,使用[]表示json对象数组
jsonjavascript里边就是字面量对象 var obj = {名称:值,名称:值,名称:function(){}}
var customer={firstName:'John',lastName:'Doe'};以上赋值语句的右边是一个对象字面量(object literal)。
对象字面量是一个名值对列表,每个名值对之间用逗号分隔,并用一个大括号括起。各名值对表示对象的一个属性,名和值这两部分之间用一个冒号分隔。在编程语言中,字面量是一种表示值的记法。
JSON和XML一样也是一种简单文本格式。相对于XML,JSON更加易读、更便于肉眼检查。
在语法的层面上,JSON与其他格式的区别是在于分隔数据的字符,JSON中的分隔符限于单引号'、小括号()、中括号[]、大括号{}、冒号:和逗号,
    2.2 PHP解析JSON
        json_encode      将数组/对象转换成json对象
               json_encode(关联数组/索引关联数组/对象)---》json对象,json_encode(索引数组)---》json数组
        json_decode
            反编码json,返回数组或对象,默认false对象
     json_decode(json,true)--->array,json_decode(json,false)--->object
    2.3 JS解析JSON
        通过eval()将字符串变成JSON对象,或者.符号直接当数组用
    $color=array('red','blue','green');
    echo json_encode($color);echo "<hr>";//1索引数组--》json数组
    $city=array('liaoning' => 'shenyang', 'zhejiang' => 'hangzhou','qinghai' => 'qinghaihu');
    echo json_encode($city);echo "<hr>";//2关联数组--》json对象
    $city2=array('liaoning' => 'shenyang', 'zhejiang' => 'hangzhou','beijing','青海' => '青海湖','yichun');
    echo json_encode($city2);echo "<hr>";//3索引关联数组--》json对象
    class Person{
        var $name="tom";
        var $height="170";
        function run(){
            echo $this>name."在跑步";
        }
    }
    $pers=new Person();
    echo json_encode($pers);echo "<hr>";//4对象json_encode--》json对象
    $xinxi=array('name' => '张三','addr' => '浙江','年龄' => 20,'未婚','博士');
    $jn_xinxi=json_encode($xinxi,JSON_UNESCAPED_UNICODE);
    echo $jn_xinxi;echo "<hr>";//5中文\u加两十六进制,但加该参数可正常显示
    $fan_xinxi=json_decode($jn_xinxi,true);
    var_dump($fan_xinxi);//6返回数组或对象,默认false对象
结果:1---------------------------------------------------------------------------------------------
["red","blue","green"]
2--------------------------------------------------------------------------------------
{"liaoning":"shenyang","zhejiang":"hangzhou","qinghai":"qinghaihu"}
3--------------------------------------------------------------------------------------
{"liaoning":"shenyang","zhejiang":"hangzhou","0":"beijing","\u9752\u6d77":"\u9752\u6d77\u6e56","1":"yichun"}
4--------------------------------------------------------------------------------------
{"name":"tom","height":"170"}
5--------------------------------------------------------------------------------------
{"name":"张三","addr":"浙江","年龄":20,"0":"未婚","1":"博士"}
6--------------------------------------------------------------------------------------
array(5) { ["name"]=> string(6) "张三" ["addr"]=> string(6) "浙江" ["年龄"]=> int(20) [0]=> string(6) "未婚" [1]=> string(6) "博士" }
三、无刷新表单,详见示例345
    使用FormData对象接收表单数据(是h5新技术)普通表单域上传文件域均可以收集。几个注意事项
var fd = new FormData(this);  //1表单的全部信息已经收集给fd存储了
//2使用FormData的时候,不用使用setRequestHeader()方法
xhr.send(fd); //3post提交表单信息
evt.preventDefault();//4使用事件方法阻止表单form数据提交动作
四、无刷新上传,详见示例345
    使用FormData对象接收表单数据
    进度条的实现
        通过upload对象的
            onprogress事件
                loaded     已经上传文件
                total        总文件大小
五、jQuery封装的ajax的使用,详见示例345
    5.1     $.get(url[,data][,function(msg){}回调函数][, dataType]);
        url             请求地址
        data             数据参数,给服务器传递的数据,请求字符串json对象都可以设置
        callback             回调函数,完成ajax后续处理,msg泛指从服务器传递回来数据信息的变量
        dataType:服务器返回数据类型,htmltextxmljson
    5.2     $.post(url[,data][,fn回调函数][, dataType]);
        url             请求地址
        data          数据参数
        callback       回调函数
        dataType     返回数据类型
4.10 21:55 //此处插播一条注意事项
项目第14次提交
1短信验证码功能
BUG:短信验证码这里卡了4.8个小时,短信可接收,但短信发送状态不显示
原因:Ajax接收返回的数据不正确,多返回了Sending TemplateSMS to $to <br/>{ status="100"}
解决:修改function()里function sendSms($to,$datas,$tempId='1'){}函数
将echo "Sending TemplateSMS to $to <br/>";注释掉后正确返回{"status":"101"}
注意:以后使用Ajax返回的数据只能纯json,并注意调用接口时有没有返回接口函数中的无关数据
    5.3     $.ajax-----详见示例5.1地市三级联动
$.ajax({  //json对象
       url:请求地址,
       [data]:给服务器传递的数据(请求字符串/json对象),必须键值对,注意{}外无“”,否则是字符串。
       [dataType]:默认字符串返回信息格式,数据从服务器返回格式htmltextxmljson
       [type]:[get]/post请求方式
       [success]:function(msg){}  ajax成功请求后的回调函数,可以做后续处理使用
         其中msg泛指服务器返回来的信息,相当于readyState==4的处理逻辑函数部分
       async:[true]异步/false同步,
       cache:[true]缓存/false不缓存,
});
注意:其中data2种传参方式1是json格式,2是请求字符串形式
1data: {"orderId":orderId,"commant":commant},2data: "orderId=" + orderId + "&commant=" + commant
示例345:Ajax无刷新表单提交+附件上传+进度条显示
<script type="text/javascript">
        window.onload=function(){
            var fm=document.getElementsByTagName('form')[0];
            fm.onsubmit=function(evt){
                //1dom收集表单信息,利用FormData,this:在普通事件内部代表事件元素节点对象本身
                var fd=new FormData(this);//表单的全部信息已经收集给fd存储
                //2ajax传递收集的信息
                var xhr=new XMLHttpRequest();
                xhr.upload.onprogress=function(evt){
                    var total=evt.total;//已经上传文件大小
                    var loaded=evt.loaded;//附件总大小
                    var per=Math.floor((loaded/total)*100);//上传百分比
                    document.getElementById('du').innerHTML=per+"%";
                    document.getElementById('du').style.width=per+"%";
                }
                xhr.onreadystatechange=function(){
                    if (xhr.readyState==4) {
                        alert(xhr.responseText);
                    }
                }
                xhr.open('post','./json1.php');
                //使用FormData的时候,不用使用setRequestHeader()方法
                // xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
                xhr.send(fd);
                evt.preventDefault();//阻止form表单的提交动作
                }
        }
    </script>
<style type="text/css">
        #jin{width:700px;height: 50px;border: 1px solid blue;}
        #du{width:0;height:100%;background-color: green;}
</style>
<body>
    <form method="post" action="./json1.php">//可以直接写成<form>
        <p>名字<input type="text" id="username" name="mingzi"></p>
        <p>密码<input type="password" id="pass" name="mima"></p>
        <p>邮箱<input type="text" id="email" name="youxiang"></p>
        <p>文件<input type="file" id="file" name="tupian"></p>
        <div id="jin"><div id="du"></div></div>
        <p><input type="submit" value="zhuce"></p>
    </form>
</body>
PHP接收和处理表单提交信息
    print_r($_POST);
    print_r($_FILES);
    $dir="./upload/";
    $ext=substr($_FILES['tupian']['name'],strrpos($_FILES['tupian']['name'],'.'));
    $name=date("YmdHis").'-'.mt_rand(1000,9999);
    $dir_name=$dir.$name.$ext;
    // echo $dir_name;
    if (move_uploaded_file($_FILES['tupian']['tmp_name'],$dir_name)){
        echo "Success";
    }else{
        echo "Fail";
    }
5.1地市三级联动
<title>三级联动</title>
    <script type="text/javascript" src="./jquery-1.4.4.js"></script>//引入jQuery文件
    <script type="text/javascript">
        var xmlobj; //声明全局变量
       $.ajax({
            url:'./ChinaArea.xml', //解析xml文件
            type:'get',
            dateType:'xml',
            success:function(msg){
                xmlobj=msg;
                showprovince(); //引入成功后执行显示省份函数
            }
        });
        // window.onload=function(){//javascript加载方法
        //     $.ajax({
        //         url:'./ChinaArea.xml',
        //         type:'get',
        //         dateType:'xml',
        //         success:function(msg){
        //             xmlobj=msg;
        //             showprovince();
        //         }
        //     });
        // ;}
        // $(function(){//jQuery加载方法
            // ajax代码
        // });
        functionshowprovince(){ //获得全部省份的province元素节点,并遍历获得具体省份信息
            $(xmlobj).find('province').each(function(){
                var prova=$(this).attr('province');
                var proid=$(this).attr('provinceID');
                $('#province').append("<option value='"+proid+"'>"+prova+"</option>");//遍历赋值
            });
        }
        functionshowcity(){     //根据选取的省份显示对应的城市信息
            //获得被选中省份的id值//根据pid获得对应的省份元素节点对象,进而获得其内部的City城市节点
            varpid=$('#province option:selected').val();       
            varcitys=$(xmlobj).find("[provinceID="+pid+"]").find('City');
            $('#city').empty();
            $('#area').empty();//先清空
            citys.each(function(){//遍历citys并显示城市信息
                var citva=$(this).attr('City');//this:分别依次代表每个city的dom对象
                var citid=$(this).attr('CityID');
                $('#city').append("<option value='"+citid+"'>"+citva+"</option>");
            });
        }
        functionshowarea(){     //获得地区信息
            var cid=$('#city option:selected').val();
            var areas=$(xmlobj).find("[CityID="+cid+"]").find('Piecearea');   
            $('#area').empty();       
            areas.each(function(){
                var areava=$(this).attr('Piecearea');
                var areaid=$(this).attr('PieceareaID');
                $('#area').append("<option value='"+areaid+"'>"+areava+"</option>");
            });
        }
    </script>

<body>
    <h2>地市三级联动</h2>
    省份:<select id='province' onchange="showcity()"><option>---</option></select>
    城市:<select id='city' onchange="showarea()"><option>---</option></select>
    区县:<select id='area'><option>---</option></select>
</body>
XML、SimpleXML、xpath RSS简介
XML: extensible markup  language (可扩展标记语言)
一个网站会给其他一些网站提供接口数据,这些数据过来的时候需要被组织为一定的格式,该格式可以是xml(json)
XML类似于HTML,也是一种标记语言,XML的设计宗旨是为了传输数据,而不是显示数据
一、xmlhtml的区别和联系
1、联系:它们都是标签语言
区别:① 侧重点
xml侧重数据的传输、数据的存储
html侧重数据的表现
② 标签自我描述性
xml可以根据自己的想法,自定义使用的标签
html需要使用一些固定标签(table div span等等)
③ 标签和表现是否分离
xml标签和表现是分离的
html标签和表现是在一起的,例如h1  h2  h3  p 等标签在使用的时候会表现出一定的“样式”
2、作用配置文件小型数据库xml被设计为office excel(2007版本)办公文档 ,
数据接口---网站服务器--->数据接口-天气、微信、视频等(格式为XML)--->其他网站php,java,C#
其他作用:存储数据库。结构化文档。 存储矢量图形 描述多媒体演示定义通道。 描述软件包及其依赖的软件……
<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student1>
        <name  sex="female">李华</name>
        <age>20</age>
        <地址>福州</地址>
        <descript><![CDATA[李华“很靓”,用'自己'的<才华>建设班级&英语角!]]></descript>
    </student1>
</students>
3、xml语法,特点:xml语法规则严格,但简单赋予逻辑   
1.必须有标记头且顶头写前面不能有空格或其他<?xml version="1.0" encoding="UTF-8"?>
2.必须有且只有一个根节点
3.元素都必须有关闭标签
4.标签元素大小写敏感,前后标签大小写必须一致
5.标签可以嵌套但不可以交叉
6.元素属性必须有值且值必须加引 号
7.特殊符号必须使用实体
8.大量特殊符号使用<![CDATA[ 内容 ]]>节
补充:xml空格会被保留,一个空格就会占一个空位
土豆案例:
二、相关函数
strrchr():函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符
     例:$a =“xiaoming@163.com@sohu.com”;     echo strrchr($a,’@’);  //@sohu.com
srt_replace($search,$replace,$str) 函数以其他字符替换字符串中的一些字符(区分大小写)
file_get_contents()---可作爬虫
1、file_get_contents(本地文件) 打开一个本地文件
2、file_get_contents(url地址) 对一个url地址发起请求,并返回请求信息(浏览器显示的信息) 
file_put_contents():将字符串写入一个文件,第一个参数文件名,第二个参数要写入的字符串,
与依次调用 fopen(),fwrite() 以及 fclose()效果相同。
三.SimpleXML操作xml
1、具体使用simplexml,xml进行处理的技术有:
simplexml,对xml进行增、删、改、查操作
DOM 最强大的,增、删、改、查都可以
xpath技术,专门进行xml查询操作
2、simplexml的使用步骤:
引入xml信息(两种方法)---着重记忆
$sim = simplexml_load_file(xml文件);将xml文件转为对象
$sim = simplexml_load_string(xml字符串);将xml文档转为对象
以上两行代码,$sim都是对象返回,具体是SimpleXMLElement
利用$sim调用获得各个标签包含的信息,例如<student>奥巴马</student>,获取奥巴马内容
返回的信息是一个Object对象,因此需要做(string)数据类型转换
echo (string)$sim->标签1->标签2->标签3,其中标签1xml第二层标签,各个标签出现同名称情况,需要通过[下标]方式进行区分
     例如$sim->标签[2]->标签,下标是从0开始计数,如果都没有设置下标,则会直接取同级的第一个标签
利用$sim获得属性信息---$sim ->标签->标签->attributes()->属性名称
保存设置好的xml
a. 浏览器直接输出xml:header(‘content-type:text/xml;charset=utf-8’);     echo $sim -> asXML();
b. xml保存到一个文件里边$sim -> asXML(file文件);
3、simplexml使用操作
    1添加
        addChild(名称,[值]) 追加子节点,无值则创建新空节点
        addAttribute(名称,值):添加属性,值必须写
        asXML()有参数生成文件,无参数直接输出,参数是文件名
    2修改 ---重新赋值 $xml->student[2]->name=莉莉'
    3删除 ---unset( $xml->student[2]->name) 
    4获取 ---类似对象取值 $xml->student[2]->name
四、Xpath简介及使用
    Xpath是帮助我们通过类似定义“路径”的方式非常快速地获取xml中指定的节点信息的语言。
    Xpath定义路径有两种风格
        从xml根节点开始获取: $path = “/name/name/name/name”; 
        从xml的第二层节点开始获取:$path = “name/name/name”;   
    限制条件获取
        对指定元素的属性 '@名称’
 1、 通过元素[名称=值]限制查找对象
     ① student/name[@city] :获得student元素内部的name元素,并且要求name元素有city属性
②  student/name[@xueli='本科'] :获得student元素内部的name元素,并且要求name元素有xueli='本科'的属性
 student/name/@xueli :获得student元素内部的name元素的xueli属性
 student/name/@* :获得student元素内部的name元素的所有属性  
⑤  student[hobby]/height:获得student元素内部的height元素,要求该student元素内部有  <hobby>元素 
⑥  student[name='奥巴马']/color :获得student元素内部的color元素,并且要求student元素内部有  <name>奥巴马</name>元素
2、xpath的使用的步骤:
引入xml并创建simplexmlelement对象       $sm = simplexml_load_file('01.xml');
定义xpath路径$path = "/students/student[1]/color";//student元素下标从1开始
simplexmlelement解析处理路径获得数组节点对象$cl = $sm ->xpath($path);
获得具体元素信息echo (string)$cl[0]."<br />";  //white
<?xml version="1.0" encoding="UTF-8"?>
<students>
    <student>
        <name sex="female">李华</name>
        <age>20</age>
        <地址>福州</地址>
        <descript><![CDATA[李华“很靓”,用'自己'的<才华>建设班级&英语角&]]></descript>
        <embed src="http://player.youku.com/player.php/sid/XMTg2OTkxNzQ5Ng==/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"/>
    </student>
    <student>
        <name sex="female" school="大学">莉莉</name>
        <age>21</age>
        <hobby>羽毛球</hobby>
    </student>
</students>

<?php
 // $sm=simplexml_load_file("testx.xml");//引入xml文件方法1,获取xml对象
    $xml_string=file_get_contents("testx.xml"); //引入xml文件方法2-1
    var_dump($xml_string);
    $xmlobj=simplexml_load_string("$xml_string");//引入xml文件方法2-2,获取xml对象
    echo "<pre>";
    print_r($xmlobj);
    echo "<hr>";
    // $name=$xmlobj->student[0]->name;//李华----获取xml的值
    $name=$xmlobj->student[0]->embed->attributes()->src;//female---获取xml属性
    var_dump($name);
    echo "<hr>";
    $sm=simplexml_load_file('testx.xml');
    // $st=$sm->addChild('student');//添加第二个student二层节点信息
    // $nm=$st->addChild('name','小雷'); //添加名字
    // $nm->addAttribute('sex','male');  //添加名字的属性sex
    // $st->addChild('age',21);          //添加年龄信息
    // $sm->asXML('testx.xml');     //保存xml到testx.xml文件
    $sm->student[1]->name='莉莉';   //修改第二个节点的名字信息
    $sm->student[1]->name->attributes()->sex='female';//修改第二个节点的sex属性
    $sm->student[1]->name->addAttribute('school','大学');//添加一个属性
    echo $sm->asXML('testx.xml');//必须对修改的数据保存
    // echo $xmlobj->asXML('testx.xml');//必须对修改的数据保存
    // $path="/students/student[2]/name";//从xml根节点开始获取路径
    // $path="/students/student[2]/name/@school";//对指定元素的属性”@名称” 进行查找
    $path="student[hobby]/name";//从xml的第二层节点开始获取,并且student里边还有一个hobby元素
    $co=$sm->xpath($path);//解析处理路径获得数组节点对象
    var_dump($co);
    echo (string)$co[0];echo "<hr>";//莉莉
?>
五、在线英语词典 ---业务逻辑
        1.form表单提交单词
        2.post判断是否有数据提交,有则执行无则结束
        3.simplexml_load_file()引入词典文档$sm = simplexml_load_file('01.xml');     $path = "/students/student[1]/color";
        4.存在单词,simplexmlelement解析处理路径获得数组节点对象 ,xpath获取单词信息及例句$cl = $sm -> xpath($path);
        5.单词信息展示
<?php //先将dict.xml放到同一目录下
    header('Content-type:text/html;charset=utf-8');   
    if (!empty($_POST)) {//2.post判断是否有数据提交,有则执行无则结束
        $fword=$_POST['danci'];
        $xobj=simplexml_load_file('dict.xml');//3.simplexml_load_file()引入词典文档,通过xpath查找单词
        $meanPath="word[name='$fword']/mean";
        $lxPath="word[name='$fword']/lx";//4.存在单词,通过xpath获取单词信息及例句
        $mp=$xobj->xpath($meanPath);
        $lp=$xobj->xpath($lxPath);
        // var_dump($wp);
        $lp=(string)$lp[0];
        $lp=str_replace('/r/n', '<br/>', $lp);
//5.单词信息展示
        echo "<p>单词:<br/>$fword</p>";
        echo "<p>译文:<br/>$mp[0]</p>";//注意是数组需要指定下标
        echo "<p>例句:<br/>$lp</p>";
    }else{
        echo "请输入单词";
    }
    // var_dump($_POST);
?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h2>英文翻译</h2>
    <form action="" method="POST">//1.form表单提交单词
        <p>输入英文:<input type="text" name="danci"></p>
        <p><input type="submit" name="翻译"></p>
    </form>
</body>
</html>
单词:good
译文:
n. 善行,好处
a. 好的,优良的,上等的
[pl.]商品
例句:
Smoking is not good for your health.
吸烟对你的健康没有好处。

六、Rss简介及制作
1、Rss简介:简易信息聚合(也叫聚合内容)是一种基于XML标准,在互联网上被广泛采用的内容包装和投递协议;
    Rss优点:定时更新订阅信息,除去不必要的广告,节省时间
    应用场景:各种订阅
2.制作自己的rss---rss订阅更新是根据link进行判断;
RSS本质就是xml文档而已,该xml文档的编辑设计需要符合RSS格式(RSS是一种特殊格式的xml)
Rss是一种特殊格式的xml,拥有固定的xml格式;详细见Rss_dome.php
具体为有以下标签出现的xml文档就可以构成为rss订阅器
<rss version="2.0">
<channel>
    <title></title>                                        //rss标题名称
    <link></link>                                        //链接地址
    <description></description>                   //描述
    <item>                                          //每条新闻
        <title></title>                      //标题
        <link></link>                      //链接
        <author></author>                     //作者
        <pubDate></pubDate>         //发布时间
        <description></description> //描述
    </item>
    ...item单元标签重复出现即可
</channel>
</rss>
rss就是在服务器里边有一个“请求地址”,用户访问该地址的时候,会呈现xml(rss)新闻列表内容而已http://localhost/03_myrss.xml




原创粉丝点击