PHP输出生成XML文件实例程序

 更新时间:2016年11月25日 16:54  点击:1992
在php中输出生成xml文件的方法有很多,有直接用header输入,也有使用DomDocument与SimpleXML实现创建xml文档的。

方法一

 代码如下 复制代码

function xml_out($content, $charset = 'utf-8') {
 @header("Expires: -1");
 @header("Cache-Control: no-store, private, post-check=0, pre-check=0, max-age=0", FALSE);
 @header("Pragma: no-cache");
 @header("Content-type: application/xml; charset=$charset");
 echo '<' . "?xml version="1.0" encoding="$charset"?>n";
 echo "<root><![CDATA[" . trim($content) . "]]></root>";
 exit();
}

方法二

 代码如下 复制代码

<?php
header("Content-type: text/xml");
echo "<?xml version="1.0" encoding="UTF-8"?>";
echo "<users><user><name>小小菜鸟</name><age>24</age><sex>男</sex></user><user><name>艳艳</name><age>23</age><sex>女</sex></user></users>";
?>

方法三


使用DomDocument生成XML文件

创建节点使用createElement方法,
创建文本内容使用createTextNode方法,
添加子节点使用appendChild方法,
创建属性使用createAttribute方法

 

 代码如下 复制代码
<?PHP
$data_array = array(
    array(
    'title' => 'title1',
    'content' => 'content1',
        'pubdate' => '2009-10-11',
    ),
    array(
    'title' => 'title2',
    'content' => 'content2',
    'pubdate' => '2009-11-11',
    )
);
 
//  属性数组
$attribute_array = array(
    'title' => array(
    'size' => 1
    )
);
 
//  创建一个XML文档并设置XML版本和编码。。
$dom=new DomDocument('1.0', 'utf-8');
 
//  创建根节点
$article = $dom->createElement('article');
$dom->appendchild($article);
 
foreach ($data_array as $data) {
    $item = $dom->createElement('item');
    $article->appendchild($item);
 
    create_item($dom, $item, $data, $attribute_array);
}
 
echo $dom->saveXML();
 
function create_item($dom, $item, $data, $attribute) {
    if (is_array($data)) {
        foreach ($data as $key => $val) {
            //  创建元素
            $$key = $dom->createElement($key);
            $item->appendchild($$key);
 
            //  创建元素值
            $text = $dom->createTextNode($val);
            $$key->appendchild($text);
 
            if (isset($attribute[$key])) {  //  如果此字段存在相关属性需要设置
                foreach ($attribute[$key] as $akey => $row) {
                    //  创建属性节点
                    $$akey = $dom->createAttribute($akey);
                    $$key->appendchild($$akey);
 
                    // 创建属性值节点
                    $aval = $dom->createTextNode($row);
                    $$akey->appendChild($aval);
                }
            }   //  end if
        }
    }   //  end if
}   //  end function
?>

方法四

SimpleXML输入xml格式编码

SimpleXML作为PHP核心的组成部分,可以把XML转换为对象,但是有时候,我需要对输出的xml格式设置编码;
代码:

 代码如下 复制代码

$XML = new SimpleXMLElement("<foo />"); echo($XML->asXML());

输出结果:

 代码如下 复制代码

<?xml version="1.0"?> <foo/>

如果想输出:

 代码如下 复制代码

<?xml version="1.0" encoding="UTF-8"?> <foo/>

今天我在利用php解析xml时提示错误信息:Invalid byte 1 of 1-byte UTF-8 sequence 了,从这里看应该是uft-8的问题,解决办法其实很简单直接把uft-8改成uft8即可。


Invalid byte 1 of 1-byte UTF-8 sequence

把xml的encoding属性值UTF-8改为UTF8

org.xml.sax.SAXParseException: Content is not allowed in trailing section

把先要解析和字符串trim()一下即可解决问题。

如果是gb2312 我们也只要简单片

XML内容实际是以UTF-8编码的,因此造成了包括中文字符的XML文件无法正常阅读,将编码格式改成“GB2312”后就可以正常解析了。<?xml   version="1.0"   encoding="GB2312"?>

修改编码


第一,可以直接在XML文件中更改UTF-8为GBK或GB2312

 代码如下 复制代码

         <?xml   version="1.0"   encoding="GB2312"?>


第二,可以在Eclipse中更改,在 eclipse 的功能表 [Project]→[Properties],?? [Resources],在右?的「Text file encoding」,把原?硎窍到y??的??,改? 「UTF-8」。

近经常需要采集一些网上的数据,发现一个PHP处理HTML的利器 simple html dom,看了一下文档,使用非常方便,关键是能够用CSS选择器来访问DOM树,和jquery相似,实在是难得的利器

入门级

simple_html_dom插件
用dom处理html文件的利器
使用:
加载simple_html_dom.php文件

require_once 'simple_html_dom.php'

new simple_html_dom对象

$dom = new simple_html_dom()

加载html

$dom->load($html);

find()方法

$dom->find('div.lookLeftname', 0)->plaintext

class=‘lookLeftname'的div中的纯文本

$dom->find('div.lookLeftname', 0)->innertext

class='lookLeftname'的div中的内部文本

完整测试实例

 代码如下 复制代码

<?php
require_once("simple_html_dom.php");
ini_set('memory_limit','1000M');
ini_set("max_execution_time",6000000);

for($i=1;$i<=21;$i++){
 $html = file_get_html(http://www.111cn.net);
 $as = $html->find('.shopname a');
 $sum = 0;
 foreach($as as $a) {
  if($a->plaintext != "分店"){
   $a->href = "http://www.xx.com".$a->href;
   echo $a->outertext."------".$a->href."-------<br>";
   $sum++;
  }
 }
 echo "<br><br>第 {$i} 页结束 ,数目:{$sum}<hr>";
}
?>

在php中操作xml文档我们可以直接调用DOMDocument类或使用simplexml_load_string类来操作,这些都不需要加载算是内置函数了,我们直接使用。

是PHP脚本读取XML最原始,最笨的方法。

 代码如下 复制代码

$doc = new DOMDocument();
  
$doc->load('test.xml');
  
$rows = $doc->getElementsByTagName("ds");
  
$d = array();
  
$i = 0;
foreach($rows as $row)
{
   $web     = $row->getElementsByTagName('web');
   $webUrl  = $row->getElementsByTagName('webUrl');
   $d[$i]['web']    = $web->item(0)->nodeValue;
   $d[$i]['webUrl'] = $webUrl->item(0)->nodeValue;
   $i++;
}
  
print_R($d);


简单,容易,速度快

 代码如下 复制代码


$xmlData = file_get_contents('test.xml');
  
$xml = simplexml_load_string($xmlData);
  
$xmlArr = objectToArray($xml);

objectToArray函数代码如下

function objectToArray($object)
{  
   if(!$object) return '';
   $result = array();  
   $object = is_object($object) ? get_object_vars($object) : $object;  
   foreach ($object as $key => $val) {  
       $val = (is_object($val) || is_array($val)) ? objectToArray($val) : $val;  
       $result[$key] = $val;  
   }  
   return $result;  
}

上面讲到了读取xml,下面再介绍写xml实例

 代码如下 复制代码

$arr = array(
         array('id'=>1,'web'=>'好脚本','webUrl'=>'http://www.111cn.net'),
         array('id'=>2,'web'=>'PHP脚本','webUrl'=>'http://www.111cn.net/'),
         array('id'=>3,'web'=>'JavaScript脚本','webUrl'=>'http://www.111cn.net/'),
         array('id'=>4,'web'=>'js脚本','webUrl'=>'http://www.111cn.net/'),
         array('id'=>5,'web'=>'PHP脚本示例','webUrl'=>'http://www.111cn.net/'),
         array('id'=>5,'web'=>'JavaScript脚本示例','webUrl'=>'http://www.111cn.net/')
         );
/*使用dom生成xml,注意生成的xml中会没有空格。*/
$dom=new DOMDocument('1.0','utf-8');
  
$path= "logs/test.xml";
  
$data=$dom->createElement('data');
  
$dom->appendChild($data);
  
foreach($arr as $v)
{
    $ds = $dom->createElement('ds');
  
    $id = $dom->createAttribute('id'); 
      
    $id->nodeValue = $v['id'];
   
    $ds->setAttributeNode($id);
  
    $data->appendChild($ds);
  
    foreach($v as $kk=>$vv)
    {
       ${$kk} = $dom->createElement($kk); 
              
       $value= $dom->createTextNode($vv);
      
       ${$kk}->appendChild($value);
  
       $ds->appendChild(${$kk});
  
    }
}
  
$dom->saveXML();
  
$dom->save($path);

本文章来给大家介绍一个PHP 操作xml编程之xml的crud操作,有需要了解的同学可参考。

html代码页面

 代码如下 复制代码

<html>
<head>
    <meta http-equiv="Content-type" content="text/html;charset=utf-8">
</head>
<body>
    <form action="wordProcess.php" method="post">
        <input type="text" name="enword">
        <input type="hidden" name="type" value="query">
        <input type="submit" value="查询">
    </form>
    <span>添加单词</span>
    <form action="wordProcess.php" method="post">
        英文:<input type="text" name="enword"><br>
        中文:<input type="text" name="zhword"><br>
        <!--<input type="hidden" name="type" value="insert">
        <input type="hidden" name="type" value="update"> -->
        <input type="submit" name="type" value="添加">
        <input type="submit" name="type" value="修改">
    </form>
    <form action="wordProcess.php" method="post">
        <input type="text" name="word">
        <input type="hidden" name="type" value="delete">
        <input type="submit" value="删除">
    </form>
</body>
</html>

wordpress.php文件

 代码如下 复制代码


<?php

    //接收类型 看看用户做什么(查询、添加....)
    $type=$_REQUEST['type'];
    //echo $type;
    //exit();
    //创建xml文档对象
    $doc=new DOMDocument();
    $doc->load("words.xml");

    //进行判断
    if($type=="query"){
        //获取用户输入的值
        $enword=$_REQUEST['enword'];
       
        //判断是否进入查询
        $isEnter=false;
        //获取所有单词节点
        $words=$doc->getElementsByTagName("word");
        //遍历单词节点
        for($i=0;$i<$words->length;$i++){
            $word_node=$words->item($i);
            //获取不同的语种
            $en_word=getNodeVal($word_node,"en");
            $zh_word=getNodeVal($word_node,"zh");
            //查询
            if($enword==$en_word){
                $isEnter=true;
                echo $enword."的中文意思是:".getNodeVal($word_node,"zh");
                echo "<br/><a href='wordView.php'>返回继续查询</a>";
            }else if($enword==$zh_word){
                $isEnter=true;
                echo $enword."的英文意思是:".getNodeVal($word_node,"en");
                echo "<br/><a href='wordView.php'>返回继续查询</a>";
            }
        }

        if(!$isEnter){
            echo "无法查询";
            echo "<br/><a href='wordView.php'>返回继续查询</a>";
        }
    }else if($type=="添加"){
        //接收
        $enword=$_REQUEST['enword'];
        $zhword=$_REQUEST['zhword'];
        if(!empty($enword)&&!empty($zhword)){   
            //获取根节点
            $root=$doc->getElementsByTagName("words")->item(0);
           
            $word=$doc->createElement("word");
            $en=$doc->createElement("en",$enword);
            $zh=$doc->createElement("zh",$zhword);

            //进行挂载

            $root->appendChild($word);
            $word->appendChild($en);
            $word->appendChild($zh);

            //保存xml文件
            $doc->save("words.xml");
            echo "添加成功<br/><a href='wordView.php'>返回继续操作</a>";
        }else{
           
            echo "请输入单词";
            echo "<br/><a href='wordView.php'>返回继续操作</a>";
            exit();
        }
    }else if($type=="delete"){
       
        $word=$_REQUEST['word'];
        //获取所有单词节点
        $words=$doc->getElementsByTagName("word");
        $isEnter=false;
        //遍历单词节点
        for($i=0;$i<$words->length;$i++){
            $word_node=$words->item($i);
            //获取不同的语种
            $en_word=getNodeVal($word_node,"en");
            $zh_word=getNodeVal($word_node,"zh");
            //查询
            if($word==$en_word || $word==$zh_word){
                $isEnter=true;
                //找到父节点
                $word_node->parentNode->removeChild($word_node);
                $doc->save("words.xml");
                echo "删除成功<br/><a href='wordView.php'>返回继续操作</a>";
            }
        }

        if(!$isEnter){
            echo "操作失败";
            echo "<br/><a href='wordView.php'>返回继续操作</a>";
        }
    }else if($type="修改"){
        //接收
        $enword=$_REQUEST['enword'];
        $zhword=$_REQUEST['zhword'];
        if(!empty($enword)&&!empty($zhword)){   
            //获取所有单词节点
            $words=$doc->getElementsByTagName("word");
            //遍历单词节点
            $isEnter=false;
            for($i=0;$i<$words->length;$i++){
                $word_node=$words->item($i);
                //获取不同的语种
                $en_word=getNodeVal($word_node,"en");
                $zh_word=getNodeVal($word_node,"zh");
                //查询
                if($enword==$en_word && $zhword!=$zh_word){
                    //修改中文
                    $isEnter=true;
                    //获取zh节点
                    $zh=$word_node->getElementsByTagName("zh")->item(0);
                    $zh->nodeValue=$zhword;
                    $doc->save("words.xml");
                    echo "修改成功";
                    echo "<br/><a href='wordView.php'>返回继续操作</a>";
                }else if($enword!=$en_word && $zhword==$zh_word){
                    //修改因为
                    $isEnter=true;
                    $en=$word_node->getElementsByTagName("en")->item(0);
                    $en->nodeValue=$enword;
                    $doc->save("words.xml");
                    echo "修改成功";
                    echo "<br/><a href='wordView.php'>返回继续操作</a>";
                }   
            }

            if(!$isEnter){
                echo "没有做任何修改";
                echo "<br/><a href='wordView.php'>返回继续操作</a>";
            }

        }else{
            echo "请输入需要修改的单词";
            echo "<br/><a href='wordView.php'>返回继续操作</a>";
            exit();
        }
    }
   
    //获取节点的文本值
    function getNodeVal(&$MyNode,$tagName){
        return $MyNode->getElementsByTagName($tagName)->item(0)->nodeValue;
    }
?>

words.xml

 代码如下 复制代码

<?xml version="1.0" encoding="utf-8"?>
<words><word><en>boy</en><zh>男孩</zh></word><word><en>girl</en><zh>女孩</zh></word><word><en>fire</en><zh>火</zh></word><word><en>word</en><zh>词库</zh></word></words>

[!--infotagslink--]

相关文章

  • C#开发Windows窗体应用程序的简单操作步骤

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

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 微信小程序 页面传值详解

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

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • 使用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
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

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

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • 微信小程序 网络请求(GET请求)详解

    这篇文章主要介绍了微信小程序 网络请求(GET请求)详解的相关资料,需要的朋友可以参考下...2016-11-22
  • 微信小程序自定义tabbar组件

    这篇文章主要为大家详细介绍了微信小程序自定义tabbar组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-03-14
  • 解决Pycharm 运行后没有输出的问题

    这篇文章主要介绍了解决Pycharm 运行后没有输出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-06
  • 微信小程序如何获取图片宽度与高度

    这篇文章主要给大家介绍了关于微信小程序如何获取图片宽度与高度的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-10
  • 微信小程序手势操作之单触摸点与多触摸点

    这篇文章主要介绍了微信小程序手势操作之单触摸点与多触摸点的相关资料,需要的朋友可以参考下...2017-03-13
  • 微信小程序(应用号)开发新闻客户端实例

    这篇文章主要介绍了微信小程序(应用号)开发新闻客户端实例的相关资料,需要的朋友可以参考下...2016-10-25
  • Python爬取微信小程序通用方法代码实例详解

    这篇文章主要介绍了Python爬取微信小程序通用方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-29
  • 微信小程序 页面跳转传递值几种方法详解

    这篇文章主要介绍了微信小程序 页面跳转传递值几种方法详解的相关资料,需要的朋友可以参考下...2017-01-16
  • 微信小程序实现点击导航条切换页面

    这篇文章主要为大家详细介绍了微信小程序实现点击导航条切换页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-11-19
  • 微信小程序实现登录页云层漂浮的动画效果

    微信小程序目前的火热程度相信不用多言,最近利用空余时间用小程序实现了个动态的登录页效果,所以下面这篇文章主要给大家介绍了利用微信小程序实现登录页云层漂浮动画效果的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2017-05-09
  • jQuery读取XML文件的方法示例

    这篇文章主要介绍了jQuery读取XML文件的方法,结合实例形式分析了jQuery基于ajax针对xml文件的读取操作相关技巧,需要的朋友可以参考下...2017-02-08