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
、苹果
safari
、
opera
包括
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="触发" οnclick="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表单提交方式
ajax之get请求需要注意的两个地方:
①在
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="触发" οnclick="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:
java
script
object
notation(javascript对象符号)
其是一种数据交换格式
(
之前的
xml
也是数据交换格式
)
。
一、使用XML的方式传输数据
通过responseXML返回DOM对象
调用getElementsByTagName获取节点信息
注意:需要找到文本节点 对于文本节点可以通过nodeValue访问
二、使用JSON的方式传输数据
2.1 JSON格式的组织形式:“键-值”对 name:value,使用{}表示一个json对象,使用[]表示json对象数组
json在javascript里边就是字面量对象 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
:服务器返回数据类型,
html
、
text
、
xml
、
json
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]:默认字符串返回信息格式,数据从服务器返回格式html、text、xml、json
[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},2
data: "orderId=" + orderId + "&commant=" + commant
示例345:Ajax无刷新表单提交+附件上传+进度条显示
<script type="text/javascript">
window.οnlοad=function(){
var fm=document.getElementsByTagName('form')[0];
fm.οnsubmit=function(evt){
//1dom收集表单信息,利用FormData,this:在普通事件内部代表事件元素节点对象本身
var fd=new FormData(this);//表单的全部信息已经收集给fd存储
//2ajax传递收集的信息
var xhr=new XMLHttpRequest();
xhr.upload.οnprοgress=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.οnlοad=function(){//javascript加载方法
// $.ajax({
// url:'./ChinaArea.xml',
// type:'get',
// dateType:'xml',
// success:function(msg){
// xmlobj=msg;
// showprovince();
// }
// });
// ;}
// $(function(){//jQuery加载方法
// ajax代码
// });
function showprovince(){ //
获得全部省份的province元素节点,并遍历获得具体省份信息
$(xmlobj).find('province').each(function(){
var prova=$(this).attr('province');
var proid=$(this).attr('provinceID');
$('#province').append("<option value='"+proid+"'>"+prova+"</option>");//遍历赋值
});
}
function showcity(){ //根据选取的省份显示对应的城市信息
//获得被选中省份的id值
//根据pid获得对应的省份元素节点对象,进而获得其内部的City城市节点
var pid=$('#province option:selected').val();
var citys=$(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>");
});
}
function showarea(){ //获得地区信息
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' οnchange="showcity()"><option>---</option></select>
城市:<select id='city' οnchange="showarea()"><option>---</option></select>
区县:<select id='area'><option>---</option></select>
</body>
XML、
SimpleXML
、xpath 、 RSS简介
XML: extensible markup language (可扩展标记语言)
一个网站会给其他一些网站提供接口数据,
这些数据过来的时候需要被组织为一定的
格式
,该格式可以是
xml
(json)
XML
类似于
HTML
,也是一种标记语言,
XML
的设计宗旨是为了
传输
数据,而
不是显示
数据
一、xml与html的区别和联系
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():函数查找字符串在另一个字符串中最后一次出现的位置,并返回
从该位置到字符串
结尾的所有字符
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,
其中标签1是xml的第二层标签,
各个标签出现同名称情况,需要通过
[
下标
]
方式进行区分
例如
$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