php xml生成函数程序代码

 更新时间:2016年11月25日 16:55  点击:1981
php xml生成函数程序代码


function xml_file($filename, $keyid = 'errorentry')
{
   $string = implode('', file($filename));
   return xml_str($string, $keyid);
}

function xml_str($string, $keyid = 'errorentry')
{
 $parser = xml_parser_create();
 xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
 xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
 xml_parse_into_struct($parser, $string, $values, $tags);
 xml_parser_free($parser);
 $tdb = array();
 foreach ($tags as $key=>$val)
 {
  if($key != $keyid) continue;
  $molranges = $val;
  for ($i=0; $i < count($molranges); $i+=2)
  {
     $offset = $molranges[$i] + 1;
     $len = $molranges[$i + 1] - $offset;
     $tdb[] = xml_arr(array_slice($values, $offset, $len));
  }
 }
 return $tdb;
}

function xml_arr($mvalues)
{
 $arr = array();
 for($i=0; $i < count($mvalues); $i++)
 {
    $arr[$mvalues[$i]['tag']] = $mvalues[$i]['value'];
 }
 return $arr;
}

 

接收xml:
$xml = file_get_contents('php://input');
 
发送(post):
$xml_data = <xml>...</xml>";
$url = http://dest_url
;
$header[] = "Content-type: text/xml";//定义content-type为xml
curl_setopt($ch, CURLOPT_URL, $url
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_data
);
$response = curl_exec($ch
);
if(
curl_errno($ch
))
{
    print
curl_error($ch
);
}
curl_close($ch);
 
或者:
$fp = fsockopen($server, 80);
fputs($fp, "POST $path HTTP/1.0rn");
fputs($fp, "Host: $serverrn");
fputs($fp, "Content-Type: text/xmlrn");
fputs($fp, "Content-Length: $contentLengthrn");
fputs($fp, "Connection: closern");
fputs($fp, "rn"); // all headers sent
fputs($fp, $xml_data);
$result = '';
while (!feof($fp)) {
$result .= fgets($fp, 128);
}
return $result;

在很多应用中我们都会用到xml 特别是互动设计的朋友哦flash+xml等,下在我们就来一个实时的php输出xml 文件并进行分页吧。

<?php
    require_once("Inc/Conn.php");//系统配置文件
 $sql = "select *  from ose";
 $result = mysql_query($sql) ;
 $total = mysql_num_rows($result);
 if( $total )
 {
  $pagesize =4;
  $pagecount=($total % $pagesize)?(int)($total / $pagesize)+1:$total/$pagesize;//统计总页面
  $page  =isset($_GET['page'])?$_GET['page']:1;//取得当前页面
  $start =($page>=1 && $page<=$pagecount)?$start=$pagesize*($page-1):$start=1;//取得超始记录
  $sql.="  order by id desc limit $start,$pagesize" ;  
  $result = mysql_query( $sql );
  while( $rs = mysql_fetch_array($result) )
  {   
   $temp .= "<member id="".$rs['id']."" roomname="".$rs['User_Name'].""/>n";   
  }
 }
 else
 {
  die('{result:"false"}');
 }
 //die('bb');
 echo "<?xml version="1.0" encoding="gb2312" ?>n<root>n<page now="$page" count="$pagecount"/>n<roomlist>n",$temp,"</roomlist>n</root>";
 
?>

输出结果为:

这里是一款简单的考试问题系统哦,包括有ajax+php+xml实现的一款哦,下在我们先来看看test.html 文件吧。

<html>
<head>
<title>Ajax应用</title>
<script language="JavaScript" type="text/javascript" src="ajax.js"></script>
<style type="text/css">
<!--CSS样式表用于定义页面的显示外观,将内容和显示分离
#answershow{ border:#E2FAFA; color:#000099; font-size:12px;}
#main{visibility:hidden;}
#begin{
    visibility:visible;
 position:absolute;
 left:135px;
 top:103px;
 width:37px;
 height:16px;
 z-index:1;
}
-->
</style>
</head>
<body>
<div id="begin"><input type="button" id="startq" value="开始"></div>
<h1>简单测试系统</h1><p><b>问题:</b> <span id="question">欢迎使用本考试系统,请单击开始!</span></p>
<div id="main">
<p><b>答案:</b><input type="text" id="answer">
<input type="button" value="Submit" id="submit">
<br><b> 提示:</b><span id="answershow"></span>
</div>
<script language="JavaScript" type="text/javascript" src="manage.js"></script>
</body>
</html>

ajax.js文件

var ajaxreq=false, ajaxCallback;
function ajaxRequest(filename) {
   try {
    ajaxreq= new XMLHttpRequest();
   } catch (error) {
    try {
      ajaxreq = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (error) {
      return false;
    }
   }
   ajaxreq.open("GET",filename);
   ajaxreq.onreadystatechange = ajaxResponse;
   ajaxreq.send(null);
}
function ajaxResponse() {
   if (ajaxreq.readyState !=4) return;
   if (ajaxreq.status==200) {
      if (ajaxCallback) ajaxCallback();
   } else alert("Request failed: " + ajaxreq.statusText);
   return true;
}
是很简单的创建xmlhttp哦,更实用健全的xmlhttp创建方法最好的xmlhttp创建方法

mange.js 文件,

var qn=0,questions,right=0;
function getQuestions() {    //getElementById用于定位到要操作的页面元素
   document.getElementById("main").style.visibility="visible";
   document.getElementById("begin").style.visibility="hidden";
   document.getElementById("answer").focus();
   obj=document.getElementById("question");
   obj.firstChild.nodeValue="正在加载.....";
   ajaxCallback = nextQuestion;
   ajaxRequest("questions.xml");     //从服务器端XML文本加载问题
}
function nextQuestion() {        //显示下一个问题
   questions = ajaxreq.responseXML.getElementsByTagName("ask");
   obj=document.getElementById("question");
   if (qn < questions.length) {
      q = questions[qn].firstChild.nodeValue;
      obj.firstChild.nodeValue=q;
   } else {           //用户回答完使用题时,给予评分
   var anobj=document.getElementById("answershow");     
   anobj.innerHTML="您的分数为:"+right/questions.length*100;
   }
}
function checkAnswer() {       //即时检查用户作答情况
   answers = ajaxreq.responseXML.getElementsByTagName("key");
   a = answers[qn].firstChild.nodeValue;
   answerfield = document.getElementById("answer");
   if(answerfield.value==""){ var anobj=document.getElementById("answershow");//用户没有作答时提示
  var anobj=document.getElementById("answershow");
     anobj.innerHTML="对不起,你还没有回答";
  answerfield.focus();
     return;}
   else if (a.toLowerCase() == (answerfield.value).toLowerCase()) {  //用户答对时的提示
    right++;
    var anobj=document.getElementById("answershow");
     anobj.innerHTML="回答正确!";
   answerfield.focus();
   }
   else {
       var anobj=document.getElementById("answershow");  //用户打错时的提示
      anobj.innerHTML="答案错误,答案应为:"+a;
      answerfield.focus();
    }
   qn = qn + 1;
   answerfield.value="";
   nextQuestion();
}
//下面几行为按钮创建事件处理
obj=document.getElementById("startq");
obj.onclick=getQuestions;
ans=document.getElementById("submit");
ans.onclick=checkAnswer;
这个文件是分析节点,判断答案是否正确的。

questions.php

<?php
 $link=mysql_connect("localhost","root","");
 mysql_select_db("quiz",$link);
 mysql_query("set names gb2312");
 $sql=mysql_query("select * from questions");
 echo "<?xml version='1.0' encoding='gb2312'?><questions>";
 
 while($info=mysql_fetch_array($sql)){
  echo "<ask>".$info[question]."</ask><key>".$info[answer]."</key>";
  };
 echo "</questions>";
?>

questions.xml

<?xml version="1.0" encoding="gb2312" ?>
<questions>
  <ask>传统的web开发模式与Ajax开发模式相比,哪个效率更高?</ask>
  <key>Ajax</key>
  <ask>Ajax技术的核心对象是什么?</ask>
  <key>XMLHttpResponse</key>
  <ask>Ajax技术中使用什么方法来定位你需要操作的元素?</ask>
  <key>getElementById</key>
  <ask>Ajax用来定义显示的是什么技术?</ask>
  <key>CSS</key>
   <ask>服务端对浏览端的响应存储在XMLHttpResponse的哪个属性中(作为xml文档)?</ask>
  <key>responseXML</key>
</questions>

就这么简单哦,下面来看看这款吧。

载入XML从外部域
       由Kalliban :二零零四年五月十三日
如果您试图载入一个XML的文件,是位于不同的网域您的Flash电影,你最有可能注意到, XML.load ( )函数仅限于XML的文件,都位于相同的网域作为Flash影片。
这意味着你可以不加载XML文件“ http://www.site.com/data.xml ”到Flash影片“ http://www.swfdomain.com/flash.swf ”的XML.load ( )功能。

然而,有一个非常简单的方式解决这个用PHP 。在经历本教程,我建议您看看其他的XML教程在这里kirupa.com 。

好吧,让我们开始吧!

创建的XML
XML的文件我们要利用这个例子将是非常基本的,因为它只是为了演示。虽然,有一件事,绝不能成为包含在XML文件!这是XML声明标记,它看起来像这样:

 <?xml version="1.0" encoding="iso-8859-1"?>

如果该标记是包含在XML文件,它会导致一个PHP解析错误,因为PHP将治疗范围内的一切“ ?和? “作为PHP代码。我将讨论这个问题。
好了,所以XML的文件将是:

<testNode>
  <testChildnode testVar="blah">Test</testChildNode>
</testNode>

只要复制粘贴到记事本,网页或任何其他程序能够编辑XML数据。

将档案储存为test.xml 。


创建的PHP
PHP的文件也将非常简单。我们将利用包括( )函数来加载XML的文件到的PHP脚本。

<?php
include($_GET['xmlsource']);
?>

为了使它有点更具活力,我们将指派路径的XML文件,并使用GET方法。因此,当我们加载PHP的Flash影片,它看起来就像这样:

loadXML.php ? xmlsource = test.xml

保存的PHP脚本作为loadXML.php 。
[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25