PHP中的生成XML文件的4种方法
Xml代码
 
<?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代码
 
<?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_x方法, 
创建文本内容使用createTextNode方法, 
添加子节点使用a方法, 
创建属性使用createAttribute方法 
PHP代码如下: 
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_x('article');
 
$dom->appendchild($article);
 
  
foreach ($data_array
as $data) {  
 
  $item =
$dom->createElement_x('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_x($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->a($aval);
 
 
     
     
  }  
 
     
    }   //
 end if  
 
      }
 
 
  }   //  end if
 
}  
//  end function
 
?>
  
【XMLWriter】 
方法3:使用XMLWriter类创建XML文件 
此方法在PHP
5.1.2后有效 
另外,它可以输出多种编码的XML,但是输入只能是utf-8 
PHP代码如下: 
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代码
 
 
 
<?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();  
?>