Heim  >  Artikel  >  Backend-Entwicklung  >  Das PHP-Array generiert gekapselte Klasseninstanzen von Daten im XML-Format

Das PHP-Array generiert gekapselte Klasseninstanzen von Daten im XML-Format

高洛峰
高洛峰Original
2016-12-22 15:22:29993Durchsuche

Das Beispiel in diesem Artikel beschreibt die Kapselungsklasse zum Generieren von XML-Formatdaten aus PHP-Arrays. Geben Sie es wie folgt als Referenz an alle weiter:

Klassenbibliothekscode: MakeXML.php:

<?php
/**
* MakeXML
*
* @author Lin Jiong(slime09@gmail.com)
* @version v1.0
* @license Copyright (c) 2009 Lin Jiong (www.cn09.com)
* The LGPL (http://www.gnu.org/licenses/lgpl.html) licenses.
*/
/*
* 从数组生成XML文件
*/
class Fwcms_MakeXML
{
  private static $instance;
  private function __construct(){}
  /**
   * 单件模式调用本类
   *
   * @return 单件模式
   */
  public static function getInstance() {
    if (!isset(self::instance)) {
      self::instance = new Fwcms_MakeXML();
    }
    return self::instance;
  }
  /**
   * 获取XML字串
   * @param $array 用于生成XML的数组,数组可以是二维或多维的,其中的第一个元素作为XML元素名
   * @param $xslName XSL文件名(如:"http://www.xxx.com/templates/normal/xslname.xsl")
   * @return $XMLString 输出XML字符串
   */
  public function getXML($array,$xslName=""){
    $XMLString = &#39;<?xml version="1.0" encoding="utf-8"?>&#39;;
    if($xslName!="")
      $XMLString.=&#39;<?xml-stylesheet type="text/xsl" href="&#39;.$xslName.&#39;"?>&#39;;
    $XMLString.=$this->make($array);
    return $XMLString;
  }
  /*
   * 递归生成XML字串
   */
  private function make($array)
  {
    $XMLString=&#39;&#39;;
    $haveRightBracket=FALSE;
    if(isset($array[&#39;elementName&#39;])){
      $elementName=array_shift($array);//数组的第一个元素为XML元素名
    }else{
      $elementName=&#39;item&#39;;//如果没有指定则元素名为item
    }
    $XMLString.=&#39;<&#39;.$elementName.&#39; &#39;;
    if(is_array($array)){
    foreach($array as $paramKey=>$nodeParam){
        if(!is_array($nodeParam)){
          //如果不是一个下级元素,那就是元素的参数
          $XMLString.=$paramKey.&#39;="&#39;.$nodeParam.&#39;" &#39;;
        }else{
          if(!$haveRightBracket){
            $XMLString.=&#39;>&#39;;
            $haveRightBracket=TRUE;
          }
          //如果是下级元素,则追加元素
          $XMLString.=$this->make($nodeParam);
        }
      }
    }
    if(!$haveRightBracket){
      $XMLString.=&#39;>&#39;;
      $haveRightBracket=TRUE;
    }
    $XMLString.=&#39;</&#39;.$elementName.&#39;>&#39;;//该元素处理结束
    return $XMLString;
  }
  /**
   * 将字串保存到文件
   * @param $fileName 文件名
   * @param $XMLString 已经生成的XML字串
   */
  public function saveToFile($fileName,$XMLString)
  {
    if(!$handle=fopen($fileName,&#39;w&#39;))
    {
      return FALSE;
    }
    if(!fwrite($handle,$XMLString))
    {
      return FALSE;
    }
    return TRUE;
  }
  /**
   * 直接通过数组生成XML文件
   */
  public function write($fileName,$array,$xslName=&#39;&#39;){
    $XMLString=$this->getXML($array,$xslName);
    $result=$this->saveToFile($fileName,$XMLString);
    return $result;
  }
}

Testcode testXML. php :

<?php
require_once &#39;MakeXML.php&#39;;
$xml=Fwcms_MakeXML::getInstance();
//$xml=new Fwcms_MakeXML();
$array=array(
    &#39;elementName&#39;=>&#39;data&#39;,//XML节点名,如不定义则默认为ITEM
    &#39;test1&#39;=>array(
      //不定义本节点名
      //&#39;elementName&#39;=>&#39;item1&#39;,
      &#39;id&#39;=>1,
      &#39;title&#39;=>&#39;try1&#39;
    ),
    &#39;test2&#39;=>array(
      &#39;elementName&#39;=>&#39;item2&#39;,
      &#39;id&#39;=>2,//参数
      &#39;title&#39;=>&#39;try2&#39;,//参数
      &#39;test2.2&#39;=>array(
        //XML子节点,必须放在所有参数之后,后面不可以再跟参数
        &#39;elementName&#39;=>&#39;item2.2&#39;,
        &#39;id&#39;=>2.2,
        &#39;title&#39;=>&#39;try2.2&#39;
      )
    ),
    &#39;test3&#39;=>array(
      &#39;elementName&#39;=>&#39;item3&#39;,
      &#39;id&#39;=>3,
      &#39;title&#39;=>&#39;try3&#39;
    ),
    &#39;test4&#39;=>array(
      &#39;elementName&#39;=>&#39;item4&#39;,
      &#39;id&#39;=>4,
      &#39;title&#39;=>&#39;try4&#39;
    ),
    &#39;test5&#39;=>array(
      //不定义本节点名
      //&#39;elementName&#39;=>&#39;item5&#39;,
      &#39;id&#39;=>5,
      &#39;title&#39;=>&#39;try5&#39;
    )
  );
$string=$xml->getXML($array);//由数组生成XML字串
$xml->saveToFile(&#39;test.xml&#39;,$string);//把生成的XML字串写入到文件
$xml->write(&#39;test2.xml&#39;,$array,&#39;test2.xsl&#39;);//直接从数组中获取字串生成文件
header ("content-type: text/xml");
echo $string;
?>

Ich hoffe, dieser Artikel wird für alle hilfreich sein, die sich mit PHP-Programmierung befassen.

Weitere verwandte Artikel zu Kapselungsklassenbeispielen zum Generieren von XML-Formatdaten aus PHP-Arrays finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn