php获取xml中的数据格式_PHP获取XML传递的数据

导读:

首先先明确XML 是一种用于标准结构化文档交换的数据格式(另一种JSON),你可以在 XML 教程 中找到更多有关 XML 的信息。

实现:

XML一般格式:

饮杯梦回酒

male

如果想在PHP文件中获取XML中的数据,可以使用file_get_contents()函数(详情),此外事先必须先利用header()函数(详情)来告诉浏览器将其按照XML文件格式解析,编写完XML和PHP文件后,在web页面处理Ajax请求的成功的回调中不再使用xhr.responseText方法获取PHP返回的数据转而使用xhr.responseXML,最终该函数会把整个文件读入到一个字符串中,通过与HTML一样的DOM操作拿数据(整体流程以上述XML文件为例):

1.PHP获取XML数据

header("Content-type:application/xml"); // 还有一种是类型是:text/xml 二者本质的区别在于编码,前者采用XML中自定义的编码(推荐)

echo file_get_contents("info.xml");

?>

2.在Ajax中获取数据

ps:这里我利用原生JS封装好了一个自己的myAjax方法(简书MarkDown不支持页内跳转,故源码放在页面底部)

Document

window.onload = function() {

var btn = document.getElementsByTagName("button")[0];

btn.onclick = function() {

myAjax({

type: "GET",

url: "ajax-xml.php",

success: function(xhr) {

var res = xhr.responseXML; // res打印出来就是#document(与HTML的简直一模一样)

console.log(res.querySelector("name").innerHTML, res.querySelector("sex").innerHTML);

},

error: function(xhr) {

alert(xhr.status);

}

})

}

}

发送请求

最终在浏览器得到返回结果如下:

55c3ef608f2b

Result

总结:

以上就是PHP获取XML数据的核心代码,当然根据需求不同用到的方法也不尽相同,小伙伴应灵活应对(毕竟有我们万能的W3C)。

附自己封装的myAjax方法:

function obj_new(data) {

// 防止IE7↓有Ajax缓存,所以每次请求时都动态的改变URL参数

data.t = new Date().getTime();

var res = [];

for(var key in data) {

// URL中不能出现中文,使用encodeURIComponent方法进行转码

res.push(encodeURIComponent(key)+"="+encodeURIComponent(data[key]));

}

return res.join("&");

}

function myAjax(option) {

// 把传入的对象转化成URL字符串形式

if(option.data){

var str = obj_new(option.data);

}

var xmlhttp, timer;

// 创建异步请求对象

if (window.XMLHttpRequest)

{// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

}else {// code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

if(option.type.toUpperCase() == "GET") {

xmlhttp.open(option.type, option.url+"?"+str, true);

xmlhttp.send();

} else {

xmlhttp.open(option.type, option.url, true);

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

xmlhttp.send(str);

}

xmlhttp.onreadystatechange = function() {

clearInterval(timer);

if(xmlhttp.readyState === 4) {

if(xmlhttp.status >= 200 && xmlhttp.status < 300 || xmlhttp.status == 304) {

option.success(xmlhttp);

} else {

option.error(xmlhttp);

}

}

}

// 判断是否传入了超时时间

if(option.timeout) {

timer = setInterval(function(){

console.log("中断请求");

xmlhttp.abort();

clearInterval(timer);

}, option.timeout)

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值