我与xml的邂逅
发布日期:2021-05-18 08:43:46 浏览次数:26 分类:精选文章

本文共 4154 字,大约阅读时间需要 13 分钟。

PHP生成并解析XML技术实践指南

1. PHP生成XML

PHP提供多种方法生成XML文件或字符串,以下是常用的四种方法

1.1 字符串拼接法

简单且高效,适合小规模数据生成

public function stringToXml()    {        $xml = '';        $xml .= ' ';        foreach ($data as $item) {            $xml .= '';            $xml .= 'title1';            $xml .= 'content1';            $xml .= '2020-11-14';            $xml .= '';        }        $xml .= ' ';        return $xml;    }

1.2 DOM文档生成法

使用DOMDocument类创建XML文档,适合结构复杂的数据生成

public function domToXml()    {        $data = array(            array('title' => 'title1', 'content' => 'content1', 'pubdate' => '2020-11-14'),            array('title' => 'title2', 'content' => 'content2', 'pubdate' => '2020-11-11')        );     $dom = new \DomDocument('1.0', 'utf-8');    $article = $dom->createElement('article');    $dom->appendChild($article);    foreach ($data as $item) {        $xmlItem = $dom->createElement('item');        $article->appendChild($xmlItem);        foreach ($item as $key => $value) {            $xmlNode = $dom->createElement($key);            $xmlItem->appendChild($xmlNode);            $xmlNode->appendChild($dom->createTextNode($value));            if (isset($attributes[$key])) {                foreach ($attributes[$key] as $attribute => $value) {                    $xmlNode->appendChild($dom->createAttribute($attribute, $value));                }            }        }    }    return $dom->saveXML();}

1.3 XMLWriter类

推荐使用XMLWriter生成XML文件,支持多种编码格式

public function xmlWriter()    {        $data = array(            array('title' => 'title1', 'content' => 'content1', 'pubdate' => '2020-11-14'),            array('title' => 'title2', 'content' => 'content2', 'pubdate' => '2020-11-11')        );     $attribute = array('title' => array('size' => 1));    $xml = new \XMLWriter();    $xml->openUri('php://output');    $xml->setIndent(4);    $xml->setIndent(true);    $xml->startDocument('1.0', 'utf-8');    $xml->startElement('article');    foreach ($data as $item) {        $xml->startElement('item');        if (is_array($item)) {            foreach ($item as $key => $value) {                $xml->startElement($key);                if (isset($attribute[$key]) && is_array($attribute[$key])) {                    foreach ($attribute[$key] as $attributeKey => $attributeValue) {                        $xml->writeAttribute($attributeKey, $attributeValue);                    }                }                $xml->text($value);                $xml->endElement();            }        }        $xml->endElement();    }    $xml->endElement();    $xml->endDocument();    $xml->flush();}

1.4 SimpleXML类

通过简单XML库快速生成和解析XML文件

public function simpleXml()    {        $xml = <<<'XML'                            $data                    $xml = simplexml_load_string($xml);    foreach ($data as $item) {        $xml->article->item->addChild('title', 'title1');        $xml->article->item->content = 'content1';        $xml->article->item->pubdate = '2020-11-14';    }    return $xml->asXML();}

2. PHP解析XML

PHP提供多种方法解析XML文件,以下是常用两种方法

2.1 DOM解析方法

使用DOMDocument类解析XML文件

public function readXmlUseDom()    {        $doc = new \DOMDocument();        $doc->load('xml.xml');     $article = $doc->getElementsByTagName('article');    $result = array();    foreach ($article as $articleNode) {        $title = $articleNode->getElementsByTagName('title')->item(0)->nodeValue;        $content = $articleNode->getElementsByTagName('content')->item(0)->nodeValue;        $pubdate = $articleNode->getElementsByTagName('pubdate')->item(0)->nodeValue;        $result[$articleNode->ugador->getAttribute('id')]['title'] = $title;        $result[$articleNode->ugador->getAttribute('id')]['content'] = $content;        $result[$articleNode->ugador->getAttribute('id')]['pubdate'] = $pubdate;    }    return $result;}

2.2 SimpleXML Load方法

使用SimpleXML库快速解析XML文件

public function readSimple()    {        $xml = simplexml_load_file('xml.xml');     $result = array();    foreach ($xml as $key => $value) {        $result[$key] = json_decode(json_encode($value), true);    }    return $result;}
上一篇:nginx服务器部署Thinkphp 5.1框架报404解决方案
下一篇:Jquery 之ajax 提交form表单数据的方法

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年05月08日 23时25分47秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章