php產生xml就像樹一樣,逐個添加節點,可以在一個父節點下添加多個子節點:
function madexml(){ //擷取模板資訊 $strTempInfo = $this->modelCmsObj->getTemplate('2007'); $arrTemp = explode("#",$strTempInfo); array_shift($arrTemp); $arrContents = array(); foreach($arrTemp as $k=>$v) { $arrContents[$k]=explode(",",$v); } //解析為xml檔案 $objDom = new DOMDocument("1.0"); header("Content-Type: text/plain"); //添加元素和文本節點 $root = $objDom->createElement("recommend"); $objDom->appendChild($root); foreach($arrContents as $k=>$v) { $item = $objDom->createElement("entry"); $root->appendChild($item); $nextitem1 = $objDom->createElement("simgurl"); $nextitem2 = $objDom->createElement("imgurl"); $nextitem3 = $objDom->createElement("fileurl"); $item->appendChild($nextitem1); $item->appendChild($nextitem2); $item->appendChild($nextitem3); $text1 = $objDom->createTextNode($v[0]); $text = $objDom->createTextNode($v[1]); $text2 = $objDom->createTextNode($v[2]); $nextitem2->appendChild($text1); $nextitem3->appendChild($text2); $nextitem1->appendChild($text); } echo $objDom->saveXML(); }
simplexml_load_string把xml串轉化為字串
$string = << Forty What? Joe Jane I know that's the answer -- but what's the question? XML; $xml = simplexml_load_string($string); var_dump($xml);
以上代碼將輸出:
SimpleXMLElement Object ( [title] => Forty What? [from] => Joe [to] => Jane [body] => I know that's the answer -- but what's the question? )
如果想把xml轉換為數組,先轉換為字串含有索引值的字串,再進行迴圈就可以成為數組:
/** * xml轉換為數組 * @param unknown_type $xml */ private function xml_to_array($xml) { $array = (array)(simplexml_load_string($xml,'SimpleXMLElement', LIBXML_NOCDATA)); foreach ($array as $key=>$item){ $array[$key] = $this->struct_to_array((array)$item); } return $array;} private function struct_to_array($item){ if(!is_string($item)) { $item = (array)$item; foreach ($item as $key=>$val){ $item[$key] = self::struct_to_array($val); } } return $item; }