PHP中的生成XML文件的4种方法
<?xml version= "1.0" encoding= "utf-8" ?> <article> <item> <title size= "1" >title1</title> <content>content1</content> <pubdate>2009-10-11</pubdate> </item> <item> <title size= "1" >title2</title> <content>content2</content> <pubdate>2009-11-11</pubdate> </item> </article> 【直接生成字符串】 方法1:使用纯粹的PHP代码生成字符串,并把这个字符串写入一个以XML为后缀的文件。这是最原始的生成XML的方法,不过有效! PHP代码如下: <?PHP $data_array = array ( array ( 'title' => 'title1' , 'content' => 'content1' , 'pubdate' => '2009-10-11' , ), array ( 'title' => 'title2' , 'content' => 'content2' , 'pubdate' => '2009-11-11' , ) ); $title_size = 1; $xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" ; $xml .= "<article>\n" ; foreach ( $data_array as $data ) { $xml .= create_item( $data [ 'title' ], $title_size , $data [ 'content' ], $data [ 'pubdate' ]); } $xml .= "</article>\n" ; echo $xml ; // 创建XML单项 function create_item( $title_data , $title_size , $content_data , $pubdate_data ) { $item = "<item>\n" ; $item .= "<title size=\"" . $title_size . "\">" . $title_data . "</title>\n" ; $item .= "<content>" . $content_data . "</content>\n" ; $item .= " <pubdate>" . $pubdate_data . "</pubdate>\n" ; $item .= "</item>\n" ; return $item ; } ?> 【DomDocument】 方法2:使用DomDocument生成XML文件 创建节点使用createElement方法, 创建文本内容使用createTextNode方法, 添加子节点使用appendChild方法, 创建属性使用createAttribute方法 PHP代码如下: <?PHP $data_array = array ( array ( 'title' => 'title1' , 'content' => 'content1' , 'pubdate' => '2009-10-11' , ), array ( 'title' => 'title2' , 'content' => 'content2' , 'pubdate' => '2009-11-11' , ) ); // 属性数组 $attribute_array = array ( 'title' => array ( 'size' => 1 ) ); // 创建一个XML文档并设置XML版本和编码。。 $dom = new DomDocument( '1.0' , 'utf-8' ); // 创建根节点 $article = $dom ->createElement( 'article' ); $dom ->appendchild( $article ); foreach ( $data_array as $data ) { $item = $dom ->createElement( 'item' ); $article ->appendchild( $item ); create_item( $dom , $item , $data , $attribute_array ); } echo $dom ->saveXML(); function create_item( $dom , $item , $data , $attribute ) { if ( is_array ( $data )) { foreach ( $data as $key => $val ) { // 创建元素 $ $key = $dom ->createElement( $key ); $item ->appendchild($ $key ); // 创建元素值 $text = $dom ->createTextNode( $val ); $ $key ->appendchild( $text ); if (isset( $attribute [ $key ])) { // 如果此字段存在相关属性需要设置 foreach ( $attribute [ $key ] as $akey => $row ) { // 创建属性节点 $ $akey = $dom ->createAttribute( $akey ); $ $key ->appendchild($ $akey ); // 创建属性值节点 $aval = $dom ->createTextNode( $row ); $ $akey ->appendChild( $aval ); } } // end if } } // end if } // end function ?> 【XMLWriter】 方法3:使用XMLWriter类创建XML文件 此方法在PHP 5.1.2后有效 另外,它可以输出多种编码的XML,但是输入只能是utf-8 PHP代码如下: <?PHP $data_array = array ( array ( 'title' => 'title1' , 'content' => 'content1' , 'pubdate' => '2009-10-11' , ), array ( 'title' => 'title2' , 'content' => 'content2' , 'pubdate' => '2009-11-11' , ) ); // 属性数组 $attribute_array = array ( 'title' => array ( 'size' => 1 ) ); $xml = new XMLWriter(); $xml ->openUri( "php://output" ); // 输出方式,也可以设置为某个xml文件地址,直接输出成文件 $xml ->setIndentString( ' ' ); $xml ->setIndent(true); $xml ->startDocument( '1.0' , 'utf-8' ); // 开始创建文件 // 根结点 $xml ->startElement( 'article' ); foreach ( $data_array as $data ) { $xml ->startElement( 'item' ); if ( is_array ( $data )) { foreach ( $data as $key => $row ) { $xml ->startElement( $key ); if (isset( $attribute_array [ $key ]) && is_array ( $attribute_array [ $key ])) { foreach ( $attribute_array [ $key ] as $akey => $aval ) { // 设置属性值 $xml ->writeAttribute( $akey , $aval ); } } $xml ->text( $row ); // 设置内容 $xml ->endElement(); // $key } } $xml ->endElement(); // item } $xml ->endElement(); // article $xml ->endDocument(); $xml -> flush (); ?> 【SimpleXML】 方法4:使用SimpleXML创建XML文档 <?PHP $data_array = array ( array ( 'title' => 'title1' , 'content' => 'content1' , 'pubdate' => '2009-10-11' , ), array ( 'title' => 'title2' , 'content' => 'content2' , 'pubdate' => '2009-11-11' , ) ); // 属性数组 $attribute_array = array ( 'title' => array ( 'size' => 1 ) ); $string = <<<XML <?xml version= '1.0' encoding= 'utf-8' ?> <article> </article> XML; $xml = simplexml_load_string( $string ); foreach ( $data_array as $data ) { $item = $xml ->addChild( 'item' ); if ( is_array ( $data )) { foreach ( $data as $key => $row ) { $node = $item ->addChild( $key , $row ); if (isset( $attribute_array [ $key ]) && is_array ( $attribute_array [ $key ])) { foreach ( $attribute_array [ $key ] as $akey => $aval ) { // 设置属性值 $node ->addAttribute( $akey , $aval ); } } } } } echo $xml ->asXML(); ?> |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步