XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,具有自我描述性、可扩展性和平台无关性等特点。在PHP中创建和输出XML文件是常见的Web开发任务,用于数据交换、API响应、配置存储等场景。
PHP提供了多种创建XML文件的方式,以下是主要的几种方法:
SimpleXML提供了一种简单直观的方式来操作XML数据。
// 创建SimpleXML对象
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><root></root>');
// 添加元素
$xml->addChild('book');
$xml->book->addChild('title', 'PHP Programming');
$xml->book->addChild('author', 'John Doe');
$xml->book->addChild('year', '2023');
// 输出XML
header('Content-type: text/xml');
echo $xml->asXML();
// 保存到文件
$xml->asXML('books.xml');
DOMDocument提供了更强大的XML处理能力,适合复杂的XML操作。
// 创建DOMDocument对象
$dom = new DOMDocument('1.0', 'UTF-8');
// 格式化输出
$dom->formatOutput = true;
// 创建根元素
$root = $dom->createElement('books');
$dom->appendChild($root);
// 添加book元素
$book = $dom->createElement('book');
$root->appendChild($book);
// 添加子元素
$title = $dom->createElement('title', 'PHP Programming');
$book->appendChild($title);
$author = $dom->createElement('author', 'John Doe');
$book->appendChild($author);
$year = $dom->createElement('year', '2023');
$book->appendChild($year);
// 输出XML
header('Content-type: text/xml');
echo $dom->saveXML();
// 保存到文件
$dom->save('books.xml');
对于简单的XML,可以直接拼接字符串:
$xml = '<?xml version="1.0" encoding="UTF-8"?>';
$xml .= '<books>';
$xml .= '<book>';
$xml .= '<title>PHP Programming</title>';
$xml .= '<author>John Doe</author>';
$xml .= '<year>2023</year>';
$xml .= '</book>';
$xml .= '</books>';
// 输出XML
header('Content-type: text/xml');
echo $xml;
// 保存到文件
file_put_contents('books.xml', $xml);
XML中的特殊字符(<, >, &, ', ")需要转义:
$description = 'This is <b>bold</b> & "important"';
$escaped = htmlspecialchars($description, ENT_XML1, 'UTF-8');
使用SimpleXML:
$xml->book->addAttribute('id', '123');
使用DOMDocument:
$book->setAttribute('id', '123');
// SimpleXML
$xml->book->addChild('description')->addCData('Some <b>HTML</b> content');
// DOMDocument
$cdata = $dom->createCDATASection('Some <b>HTML</b> content');
$description = $dom->createElement('description');
$description->appendChild($cdata);
$book->appendChild($description);
// SimpleXML
$xml->addChild('ns:element', 'value', 'http://example.com/ns');
// DOMDocument
$element = $dom->createElementNS('http://example.com/ns', 'ns:element', 'value');
header('Content-type: text/xml');
通过以上方法,您可以灵活地在PHP中创建和输出XML文件,满足各种开发需求。