您当前的位置:首页 > 分类 > 技术资讯 > PHP > 正文

PHP中的生成XML文件的4种方法

发布时间:2013-05-25 21:05:58      来源:51推一把
【摘要】PHP中的生成XML文件的4种方法
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <article>
  3. <item>
  4. <title size="1">title1</title>
  5. <content>content1</content>
  6. <pubdate>2009-10-11</pubdate>
  7. </item>
  8. <item>
  9. <title size="1">title2</title>
  10. <content>content2</content>
  11. <pubdate>2009-11-11</pubdate>
  12. </item>
  13. </article>

  14. 【直接生成字符串】
  15. 方法1:使用纯粹的PHP代码生成字符串,并把这个字符串写入一个以XML为后缀的文件。这是最原始的生成XML的方法,不过有效!
  16. PHP代码如下:

  17. <?PHP
  18. $data_array = array(
  19. array(
  20. title => title1,
  21. content => content1,
  22. pubdate => 2009-10-11,
  23. ),
  24. array(
  25. title => title2,
  26. content => content2,
  27. pubdate => 2009-11-11,
  28. )
  29. );
  30. $title_size = 1;

  31. $xml = "<?xml version="1.0" encoding="utf-8"?>n";
  32. $xml .= "<article>n";

  33. foreach ($data_array as $data) {
  34. $xml .= create_item($data[title], $title_size, $data[content], $data[pubdate]);
  35. }

  36. $xml .= "</article>n";

  37. echo $xml;

  38. // 创建XML单项
  39. function create_item($title_data, $title_size, $content_data, $pubdate_data)
  40. {
  41. $item = "<item>n";
  42. $item .= "<title size="" . $title_size . "">" . $title_data . "</title>n";
  43. $item .= "<content>" . $content_data . "</content>n";
  44. $item .= " <pubdate>" . $pubdate_data . "</pubdate>n";
  45. $item .= "</item>n";

  46. return $item;
  47. }

  48. ?>

  49. 【DomDocument】
  50. 方法2:使用DomDocument生成XML文件
  51. 创建节点使用createElement方法,
  52. 创建文本内容使用createTextNode方法,
  53. 添加子节点使用appendChild方法,
  54. 创建属性使用createAttribute方法
  55. PHP代码如下:

  56. <?PHP
  57. $data_array = array(
  58. array(
  59. title => title1,
  60. content => content1,
  61. pubdate => 2009-10-11,
  62. ),
  63. array(
  64. title => title2,
  65. content => content2,
  66. pubdate => 2009-11-11,
  67. )
  68. );

  69. // 属性数组
  70. $attribute_array = array(
  71. title => array(
  72. size => 1
  73. )
  74. );

  75. // 创建一个XML文档并设置XML版本和编码。。
  76. $dom=new DomDocument(1.0, utf-8);

  77. // 创建根节点
  78. $article = $dom->createElement(article);
  79. $dom->appendchild($article);

  80. foreach ($data_array as $data) {
  81. $item = $dom->createElement(item);
  82. $article->appendchild($item);

  83. create_item($dom, $item, $data, $attribute_array);
  84. }

  85. echo $dom->saveXML();

  86. function create_item($dom, $item, $data, $attribute) {
  87. if (is_array($data)) {
  88. foreach ($data as $key => $val) {
  89. // 创建元素
  90. $$key = $dom->createElement($key);
  91. $item->appendchild($$key);

  92. // 创建元素值
  93. $text = $dom->createTextNode($val);
  94. $$key->appendchild($text);

  95. if (isset($attribute[$key])) {
  96. // 如果此字段存在相关属性需要设置
  97. foreach ($attribute[$key] as $akey => $row) {
  98. // 创建属性节点
  99. $$akey = $dom->createAttribute($akey);
  100. $$key->appendchild($$akey);

  101. // 创建属性值节点
  102. $aval = $dom->createTextNode($row);
  103. $$akey->appendChild($aval);
  104. }
  105. } // end if
  106. }
  107. } // end if
  108. } // end function
  109. ?>

  110. 【XMLWriter】
  111. 方法3:使用XMLWriter类创建XML文件
  112. 此方法在PHP 5.1.2后有效
  113. 另外,它可以输出多种编码的XML,但是输入只能是utf-8
  114. PHP代码如下:

  115. <?PHP
  116. $data_array = array(
  117. array(
  118. title => title1,
  119. content => content1,
  120. pubdate => 2009-10-11,
  121. ),
  122. array(
  123. title => title2,
  124. content => content2,
  125. pubdate => 2009-11-11,
  126. )
  127. );

  128. // 属性数组
  129. $attribute_array = array(
  130. title => array(
  131. size => 1
  132. )
  133. );

  134. $xml = new XMLWriter();
  135. $xml->openUri("php://output");
  136. // 输出方式,也可以设置为某个xml文件地址,直接输出成文件
  137. $xml->setIndentString( );
  138. $xml->setIndent(true);

  139. $xml->startDocument(1.0, utf-8);
  140. // 开始创建文件
  141. // 根结点
  142. $xml->startElement(article);

  143. foreach ($data_array as $data) {
  144. $xml->startElement(item);

  145. if (is_array($data)) {
  146. foreach ($data as $key => $row) {
  147. $xml->startElement($key);

  148. if (isset($attribute_array[$key]) && is_array($attribute_array[$key]))
  149. {
  150. foreach ($attribute_array[$key] as $akey => $aval) {
  151. // 设置属性值
  152. $xml->writeAttribute($akey, $aval);
  153. }

  154. }

  155. $xml->text($row); // 设置内容
  156. $xml->endElement(); // $key
  157. }

  158. }
  159. $xml->endElement(); // item
  160. }

  161. $xml->endElement(); // article
  162. $xml->endDocument();

  163. $xml->flush();
  164. ?>

  165. 【SimpleXML】
  166. 方法4:使用SimpleXML创建XML文档

  167. <?PHP
  168. $data_array = array(
  169. array(
  170. title => title1,
  171. content => content1,
  172. pubdate => 2009-10-11,
  173. ),
  174. array(
  175. title => title2,
  176. content => content2,
  177. pubdate => 2009-11-11,
  178. )
  179. );

  180. // 属性数组
  181. $attribute_array = array(
  182. title => array(
  183. size => 1
  184. )
  185. );

  186. $string = <<<XML
  187. <?xml version=1.0 encoding=utf-8?>
  188. <article>
  189. </article>
  190. XML;

  191. $xml = simplexml_load_string($string);

  192. foreach ($data_array as $data) {
  193. $item = $xml->addChild(item);
  194. if (is_array($data)) {
  195. foreach ($data as $key => $row) {
  196. $node = $item->addChild($key, $row);

  197. if (isset($attribute_array[$key]) && is_array($attribute_array[$key]))
  198. {
  199. foreach ($attribute_array[$key] as $akey => $aval) {
  200. // 设置属性值
  201. $node->addAttribute($akey, $aval);
  202. }
  203. }
  204. }
  205. }
  206. }
  207. echo $xml->asXML();
  208. ?>