PHP使用XMLWriter读写xml文件操作详解

本文实例讲述了PHP使用XMLWriter读写xml文件操作。分享给大家供大家参考,具体如下:

米扑科技旗下的多个产品,需要脚本自动生成sitemap.xml,于是重新温习一遍PHP XML读写操作。

读写xml的方式,主要围绕XMLWriter和XMLReader进行,前者用于生成xml,后者则是用来读取并解析xml

写入 xml

test_xml_write.php

  1. <?php
  2. /**
  3. * mimvp.com
  4. * 2017.06.22
  5. */
  6. header("Content-type: text/html; charset=utf-8");
  7. $xml = new XMLWriter();
  8. $xml->openUri("php://output"); // 输出到网页控制台
  9. $xml->openUri("mimvp.xml"); // 输出到文件,需要读写权限,推荐 chmod 766 mimvp.xml
  10. // 设置缩进字符串
  11. $xml->setIndentString("\t");
  12. $xml->setIndent(true);
  13. // xml文档开始
  14. $xml->startDocument('1.0', 'utf-8');
  15. // 创建根节点
  16. $xml->startElement("MimvpInfo");
  17. // 节点1
  18. $xml->startElement("Item");
  19. $xml->writeAttribute("info","1"); // 属性
  20. $xml->startElement("id");
  21. $xml->text("01");
  22. $xml->endElement();
  23. $xml->startElement("name");
  24. $xml->text("米扑代理");
  25. $xml->endElement();
  26. $xml->endElement();
  27. // 节点2
  28. $xml->startElement("Item");
  29. $xml->writeAttribute("info","1"); // 属性
  30. $xml->startElement("id");
  31. $xml->text("02");
  32. $xml->endElement();
  33. $xml->startElement("name");
  34. $xml->text("米扑财富");
  35. $xml->endElement();
  36. $xml->endElement();
  37. $xml->endElement();
  38. $xml->endDocument();
  39. //header("Content-type: text/xml");
  40. //取得缓冲区里的xml字符串
  41. //echo $xml->outputMemory();
  42. ?>

输出mimvp.xml文件内容:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <MimvpInfo>
  3. <Item info="1">
  4. <id>01</id>
  5. <name>米扑代理</name>
  6. </Item>
  7. <Item info="1">
  8. <id>02</id>
  9. <name>米扑财富</name>
  10. </Item>
  11. </MimvpInfo>

注意:

1. 新建mimvp.xml 文件:

touch mimvp.xml

2. 授权mimvp.xml 文件:

chmod 766 mimvp.xml

读取 xml

test_xml_read.php

  1. <?php
  2. /**
  3. * mimvp.com
  4. * 2017.06.22
  5. */
  6. header ( "Content-type: text/html; charset=utf-8" );
  7. $xml = new XMLReader ();
  8. // 载入xml文件,如果是字符串直接使用xml方法
  9. $xml->open ( "mimvp.xml" );
  10. // 开始读取xml
  11. while ( $xml->read () ) {
  12. // 根据节点类型和元素名称取得文本节点或属性
  13. if ($xml->nodeType == XMLREADER::ELEMENT && $xml->localName == 'item') {
  14. print $xml->getAttribute ( "info" ) . "</br>";
  15. }
  16. if ($xml->nodeType == XMLREADER::ELEMENT && $xml->localName == 'id') {
  17. $xml->read (); // 移动指针到下一个节点
  18. print $xml->value . "\t";
  19. }
  20. if ($xml->nodeType == XMLREADER::ELEMENT && $xml->localName == 'name') {
  21. $xml->read ();
  22. print $xml->value . "</br>";
  23. }
  24. if ($xml->nodeType == XMLREADER::ELEMENT && $xml->localName == 'age') {
  25. $xml->read ();
  26. print $xml->value . "</br>";
  27. }
  28. }
  29. ?>

输出结果:

01 米扑代理

02 米扑财富

请见米扑科技的Github: https://github.com/mimvp/sitemap-php