php生成xml和转换的代码

 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串转化为字符串

   
  
Forty What?  
Joe  
Jane  
  
  I know that's the answer -- but what's the question?  
  
  
XML;  
 
$xml = simplexml_load_string($string);  
 
var_dump($xml);  
?>   
 
/* 
This script will display:   
 
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;  
}

发表评论

返回顶部