本来想用一个xml文件来获取不断更新的数据,接触这个模块后,发现似乎不能在顶部插入节点,比如有个channel节点,插入子节点始终只能从底部插入,但博主又希望新的内容在channel节点的头部。每次重新装配节点似乎过于复杂,考虑利用json数据来做同样的工作,花了半天时间学习SimpleXML,暂且记录一下学习过程中用到的命令。
读取本地文件
<?php
// The file test.xml contains an XML document with a root element
// and at least an element /[root]/title.
if (file_exists('test.xml')) {
$xml = simplexml_load_file('test.xml');
print_r($xml);
} else {
exit('Failed to open test.xml.');
}
?>
保存为文件
$file = fopen('NhkRadio.xml','w') ;
fwrite($file, $xml->asXML() );
fclose($file);
增加子节点
<?php
include 'example.php';
$sxe = new SimpleXMLElement($xmlstr);
$sxe->addAttribute('type', 'documentary');
$movie = $sxe->addChild('movie');
$movie->addChild('title', 'PHP2: More Parser Stories');
$movie->addChild('plot', 'This is all about the people who make it work.');
$characters = $movie->addChild('characters');
$character = $characters->addChild('character');
$character->addChild('name', 'Mr. Parser');
$character->addChild('actor', 'John Doe');
$rating = $movie->addChild('rating', '5');
$rating->addAttribute('type', 'stars');
echo $sxe->asXML();
?>
SimpleXML值转换为字符串
无论SimpleXML子项的值有多少项,如果直接赋值操作得到的都会是一个数组,有时候我们只是想提取到子项的值,不想连格式也一并拿过来,这个时候需要多加一步转换为字符串的操作:
//返回的是一个数组
$item -> title
//返回的是一个字符串
$item -> title -> __toString();