用PHP编写和读取XML的几种方式

 更新时间:2013年01月12日 16:31:33   作者:  
今天我看了IBM的一些官方文档和一些XML的相关资料,特把一些关键点以及PHP编写和读取XML的一些实例整理出来,方便以后使用
一.使用DOM生成和读取XML文件
实例一:
复制代码 代码如下:

<?php
//Creates XML string and XML document using the DOM
$dom = new DomDocument('1.0');
//add root - <books>
$books = $dom->appendChild($dom->createElement_x_x ('books'));
//add <book> element to <books>
$book = $books->appendChild($dom->createElement_x_x ('book'));
//add <title> element to <book>
$title = $book->appendChild($dom->createElement_x_x ('title'));
//add <title> text node element to <title>
$title->appendChild($dom->createTextNode('Great American Novel'));
//generate xml
$dom->formatOutput = true; // set the formatOutput attribute of domDocument to true
//save XML as string or file
$test1 = $dom->saveXML(); // put string in test1
$dom -> save('test1.xml'); // save as file
?>

实例二:
复制代码 代码如下:

$aa = "111";
$xmlstr = <<<XML
<?xml version='1.0'?>
<document>
<title>{$aa}</title>
<from>Joe</from>
<to>Jane</to>
<body>
I know that's the answer -- but what's the question?
</body>
</document>
XML;
$dom = new domDocument;
$dom->loadXML($xmlstr);
$test1 = $dom->saveXML();
$dom->save('test1.xml');


实例三:
test1.xml:
复制代码 代码如下:

<?xml version="1.0"?>
<books>
<book>
<author>Jack Herrington</author>
<title>PHP Hacks</title>
<publisher>O'Reilly</publisher>
</book>
<book>
<author>Jack Herrington</author>
<title>Podcasting Hacks</title>
<publisher>O'Reilly</publisher>
</book>
</books>


example.php:
复制代码 代码如下:

$doc = new DOMDocument();
$doc->load('test1.xml');
$books = $doc->getElementsByTagName("book");
foreach($books as $book){
$authors = $book->getElementsByTagName("author");
$author = $authors->item(0)->nodeValue;
$publishers = $book->getElementsByTagName( "publisher" );
$publisher = $publishers->item(0)->nodeValue;
$titles = $book->getElementsByTagName( "title" );
$title = $titles->item(0)->nodeValue;
echo "$title - $author - $publisher\n";
}


二.使用simple生成和读取xml文件
实例一:
复制代码 代码如下:

<?
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<books>
<book>
<title>Great American Novel</title>
<characters>
<character>
<name>Cliff</name>
<desc>really great guy</desc>
</character>
<character>
<name>Lovely Woman</name>
<desc>matchless beauty</desc>
</character>
<character>
<name>Loyal Dog</name>
<desc>sleepy</desc>
</character>
</characters>
<plot>
Cliff meets Lovely Woman. Loyal Dog sleeps, but wakes up to bark
at mailman.
</plot>
<success type='bestseller'>4</success>
<success type='bookclubs'>9</success>
</book>
</books>
XML;

//提取节点内容
$xml = new SimpleXMLElement($xmlstr);
foreach ($xml->book[0]->success as $success) {
switch((string) $success['type']) { // Get attributes as element indices
case 'bestseller':
echo $success. ' months on bestseller list<br>';
break;
case 'bookclubs':
echo $success. ' bookclub listings';
break;
}
}

//修改文本节点内容
$xml = new SimpleXMLElement($xmlstr);
$xml->book[0]->characters->character[0]->name = 'Big Cliff';
echo $xml->asXML();

//添加子元素的文本节点
$xml = new SimpleXMLElement($xmlstr);
$character = $xml->book[0]->characters->addChild('character');
$character->addChild('name', 'Yellow Cat');
$character->addChild('desc', 'aloof');
$success = $xml->book[0]->addChild('success', '2');
$success->addAttribute('type', 'reprints');
echo $xml->asXML();

?>


实例二:
复制代码 代码如下:

if (file_exists('test1.xml')) { //读取xml文件
$xml = simplexml_load_file('test1.xml');
var_dump(xml);
} else {
exit('Failed to open test1.xml.');
}


三.DOM和simple互操作
DOM导入simpleXML:
复制代码 代码如下:

<?php
$sxe = simplexml_load_string('<books><book><title>Great American
Novel</title></book></books>');
if ($sxe === false) {
echo 'Error while parsing the document';
exit;
}
$dom_sxe = dom_import_simplexml($sxe);
if (!$dom_sxe) {
echo 'Error while converting XML';
exit;
}
$dom = new DOMDocument('1.0');
$dom_sxe = $dom->importNode($dom_sxe, true);
$dom_sxe = $dom->appendChild($dom_sxe);
$test2 = $dom->saveXML(); // put string in test2
$dom -> save('test2.xml'); // save as file
?>


simpleXML导入DOM:
复制代码 代码如下:

<?php
$dom = new domDocument;
$dom->loadXML('<books><book><title>Great American
Novel</title></book></books>');
if (!$dom) {
echo 'Error while parsing the document';
exit;
}
$s = simplexml_import_dom($dom);
echo $s->book[0]->title; // Great American Novel
?>

相关文章

  • PHP实现动态柱状图改进版

    PHP实现动态柱状图改进版

    这篇文章主要介绍了PHP实现动态柱状图改进版,是在前面所述实现柱状图的基础上进行的改进,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • php5 non-thread-safe和thread-safe这两个版本的区别分析

    php5 non-thread-safe和thread-safe这两个版本的区别分析

    从PHP5.2.10版本开始(现在有PHP5.2.10和5.3两个版本),有None-Thread Safe与Thread Safe两种版本的可供选择,这两种版本有何不同,作为使用者来说又应该如何选择呢?下面聚友将为您讲述。
    2010-03-03
  • 从一个不错的留言本弄的mysql数据库操作类

    从一个不错的留言本弄的mysql数据库操作类

    本文通过实例代码给大家介绍了mysql数据库操作类的相关知识,感兴趣的朋友跟随脚本之家小编一起看看吧
    2007-09-09
  • php实现的常见排序算法汇总

    php实现的常见排序算法汇总

    这篇文章主要介绍了php实现的常见排序算法汇总,包括插入排序、选择排序、冒泡排序、快速排序、归并排序与堆排序,并附有对排序算法的详细说明,需要的朋友可以参考下
    2014-09-09
  • 推荐一款MAC OS X 下php集成开发环境mamp

    推荐一款MAC OS X 下php集成开发环境mamp

    这里给大家推荐一款在mac上搭建WEB服务器环境的集成环境安装软件,非常的好用,需要的朋友可以拿去,不用谢 ^_^
    2014-11-11
  • php利用gd库为图片添加水印

    php利用gd库为图片添加水印

    这篇文章主要为大家详细介绍了php利用gd库为图片添加水印,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • php字符串过滤与替换小结

    php字符串过滤与替换小结

    这篇文章主要介绍了php字符串过滤与替换,实例总结了php实现字符串过滤与替换的技巧,需要的朋友可以参考下
    2015-01-01
  • PHP Memcached + APC + 文件缓存封装实现代码

    PHP Memcached + APC + 文件缓存封装实现代码

    PHP Memcached + APC + 文件缓存封装实现代码,需要的朋友可以参考下。
    2010-03-03
  • PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解

    PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解

    这篇文章主要介绍了PHP创建文件及写入数据(覆盖写入,追加写入)的方法,结合实例形式总结分析了php文件创建、写入操作相关函数使用技巧,需要的朋友可以参考下
    2019-02-02
  • PHP重定向与伪静态区别

    PHP重定向与伪静态区别

    伪静态是SEO重要的方法,通过重定向来实现,并且可以通过重定向来隐藏网站的技术,过滤异常访问。本课分为两部分,前半部分详细介绍Apache重定向的基础知识,后半部分通过多个实际案例再次加深对重定向的理解,并且会演示各种重定向设置后的实际效果。
    2017-02-02

最新评论