最近收到要實作要回傳 XML 的 API
不過,真得已經習慣用 PHP 做 JSON 格式
只需要用 json_encode 就可以搞定
PHP 本身函式就有對 XML 做解析
不過組 XML 好像沒有比較好方式
有查到php - XML creation using CodeIgniter - Stack Overflow
Database Utility Class — CodeIgniter 3.1.9 documentation
但這次 DB 剛好存的資料不是剛好要組出來的資料
最終有網路看到原生支援的方法
加上補<![CDATA[ ]]!>
這一段是防止>
符號產生錯誤
也不用改寫成<
XML CDATA
SimpleXMLElement 加上 CDATA 方法
php 使用 simpleXML 添加 CDATA 格式数据
php – 如何使用 SimpleXmlElement 编写 CDATA? - 代码日志
PHP: DOMDocument::createCDATASection - Manual
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?php
/**
* to show <title lang="en"><![CDATA[Site Title]]></title> instead of <title lang="en">Site Title</title>
*
*/
class SimpleXMLExtended extends SimpleXMLElement
{
public function addCData($cdata_text)
{
$node = dom_import_simplexml($this);
$no = $node->ownerDocument;
$node->appendChild($no->createCDATASection($cdata_text));
}
}
$xmlFile = 'config.xml';
// instead of $xml = new SimpleXMLElement('<sites/>');
$xml = new SimpleXMLExtended('<sites/>');
$site = $xml->addChild('site');
// instead of $site->addChild('site', 'Site Title');
$site->title = NULL; // VERY IMPORTANT! We need a node where to append
$site->title->addCData('Site Title');
$site->title->addAttribute('lang', 'en');
$xml->asXML($xmlFile);
?>
|
然後用 PHP 內建多行字串,需要注意用 NOWODC
使用 HEREDOC,裡面有$
會抓取 PHP 變數
所以需要用 NOWDOC
出輸內容
Output Class — CodeIgniter 3.1.5 documentation
1
2
3
4
5
6
7
|
$this->output
->set_content_type('application/json')
->set_output(json_encode(array('foo' => 'bar')));
$this->output
->set_content_type('jpeg') // You could also use ".jpeg" which will have the full stop removed before looking in config/mimes.php
->set_output(file_get_contents('files/something.jpg'));
|
結果
研究完,收到要改寫回傳 JSON 的 api
不過 json 會更簡單
json(xxxx,true)
跟
1
2
3
4
5
|
$json = [
"test"=>[
"number=>[0,1,2,3,4,5]
]
]
|
寫法有空整理再發文
2019-01-02 補充 Array to XML 的 Library
GitHub - Jeckerson/array2xml: [PHP] - Array to XML
GitHub - spatie/array-to-xml: A simple class to convert an array to xml
2019-03-12 用原生方法沒辦法載入
xml - How to get values inside <![CDATA[values]] > using php DOM? - Stack Overflow
[xml - PHP: How to handle <![CDATA with SimpleXMLElement? - Stack Overflow
1
2
3
4
5
|
$content = simplexml_load_string(
'<content><![CDATA[Hello, world!]]></content>'
, null
, LIBXML_NOCDATA
);
|
PHP 操作 XML | 程式前沿