Config
[ class tree: Config ] [ index: Config ] [ all elements ]

Source for file XML.php

Documentation is available at XML.php

  1. <?php
  2. // +----------------------------------------------------------------------+
  3. // | PHP Version 4                                                        |
  4. // +----------------------------------------------------------------------+
  5. // | Copyright (c) 1997-2003 The PHP Group                                |
  6. // +----------------------------------------------------------------------+
  7. // | This source file is subject to version 2.0 of the PHP license,       |
  8. // | that is bundled with this package in the file LICENSE, and is        |
  9. // | available at through the world-wide-web at                           |
  10. // | http://www.php.net/license/2_02.txt.                                 |
  11. // | If you did not receive a copy of the PHP license and are unable to   |
  12. // | obtain it through the world-wide-web, please send a note to          |
  13. // | license@php.net so we can mail you a copy immediately.               |
  14. // +----------------------------------------------------------------------+
  15. // | Author: Bertrand Mansion <bmansion@mamasam.com>                      |
  16. // +----------------------------------------------------------------------+
  17. //
  18. // $Id: XML.php 203592 2005-12-24 02:24:30Z aashley $
  19.  
  20. require_once('XML/Parser.php');
  21. require_once('XML/Util.php');
  22.  
  23. /**
  24. * Config parser for XML Files
  25. *
  26. @author      Bertrand Mansion <bmansion@mamasam.com>
  27. @package     Config
  28. */
  29. class Config_Container_XML extends XML_Parser
  30. {
  31.     /**
  32.     * Deep level used for indentation
  33.     *
  34.     * @var  int 
  35.     * @access private
  36.     */
  37.     var $_deep = -1;
  38.  
  39.     /**
  40.     * This class options:
  41.     * version (1.0) : XML version
  42.     * encoding (ISO-8859-1) : XML content encoding
  43.     * name      : like in phparray, name of your config global entity
  44.     * indent    : char used for indentation
  45.     * linebreak : char used for linebreak
  46.     * addDecl   : whether to add the xml declaration at beginning or not
  47.     * useAttr   : whether to use the attributes
  48.     * isFile    : whether the given content is a file or an XML string
  49.     * useCData  : whether to surround data with <![CDATA[...]]>
  50.     *
  51.     * @var  array 
  52.     */
  53.     var $options = array('version'   => '1.0',
  54.                          'encoding'  => 'ISO-8859-1',
  55.                          'name'      => '',
  56.                          'indent'    => '  ',
  57.                          'linebreak' => "\n",
  58.                          'addDecl'   => true,
  59.                          'useAttr'   => true,
  60.                          'isFile'    => true,
  61.                          'useCData'  => false);
  62.  
  63.     /**
  64.     * Container objects
  65.     *
  66.     * @var  array 
  67.     */
  68.     var $containers = array();
  69.  
  70.     /**
  71.     * Constructor
  72.     *
  73.     * @access public
  74.     * @param    string  $options    Options to be used by renderer
  75.     *                                version     : (1.0) XML version
  76.     *                                encoding    : (ISO-8859-1) XML content encoding
  77.     *                                name        : like in phparray, name of your config global entity
  78.     *                                indent      : char used for indentation
  79.     *                                linebreak   : char used for linebreak
  80.     *                                addDecl     : whether to add the xml declaration at beginning or not
  81.     *                                useAttr     : whether to use the attributes
  82.     *                                isFile      : whether the given content is a file or an XML string
  83.     */
  84.     function Config_Container_XML($options = array())
  85.     {
  86.         foreach ($options as $key => $value{
  87.             $this->options[$key$value;
  88.         }
  89.     // end constructor
  90.  
  91.     /**
  92.     * Parses the data of the given configuration file
  93.     *
  94.     * @access public
  95.     * @param string $datasrc    path to the configuration file
  96.     * @param object $obj        reference to a config object
  97.     * @return mixed returns a PEAR_ERROR, if error occurs or true if ok
  98.     */
  99.     function &parseDatasrc($datasrc&$obj)
  100.     {
  101.         $err = true;
  102.         $this->folding = false;
  103.         $this->cdata = null;
  104.         $this->XML_Parser($this->options['encoding']'event');
  105.         $this->containers[0=$obj->container;
  106.         if (is_string($datasrc)) {
  107.             if ($this->options['isFile']{
  108.                 $err $this->setInputFile($datasrc);
  109.                 if (PEAR::isError($err)) {
  110.                     return $err;
  111.                 }
  112.                 $err $this->parse();
  113.             else {
  114.                 $err $this->parseString($datasrctrue);
  115.             }
  116.         else {
  117.            $this->setInput($datasrc);
  118.            $err $this->parse();
  119.         }
  120.         return $err;
  121.     // end func parseDatasrc
  122.  
  123.     /**
  124.     * Handler for the xml-data
  125.     *
  126.     * @param mixed  $xp         ignored
  127.     * @param string $elem       name of the element
  128.     * @param array  $attribs    attributes for the generated node
  129.     *
  130.     * @access private
  131.     */
  132.     function startHandler($xp$elem&$attribs)
  133.     {
  134.         $container =new Config_Container('section'$elemnull$attribs);
  135.         $this->containers[=$container;
  136.         return null;
  137.     // end func startHandler
  138.  
  139.     /**
  140.     * Handler for the xml-data
  141.     *
  142.     * @param mixed  $xp         ignored
  143.     * @param string $elem       name of the element
  144.     *
  145.     * @access private
  146.     */
  147.     function endHandler($xp$elem)
  148.     {
  149.         $count count($this->containers);
  150.         $container =$this->containers[$count-1];
  151.         $currentSection =$this->containers[$count-2];
  152.         if (count($container->children== 0{
  153.             $container->setType('directive');
  154.             $container->setContent(trim($this->cdata));
  155.         }
  156.         $currentSection->addItem($container);
  157.         array_pop($this->containers);
  158.         $this->cdata = null;
  159.         return null;
  160.     // end func endHandler
  161.  
  162.     /*
  163.     * The xml character data handler
  164.     *
  165.     * @param mixed  $xp         ignored
  166.     * @param string $data       PCDATA between tags
  167.     *
  168.     * @access private
  169.     */
  170.     function cdataHandler($xp$cdata)
  171.     {
  172.         $this->cdata .= $cdata;
  173.     //  end func cdataHandler
  174.  
  175.     /**
  176.     * Returns a formatted string of the object
  177.     * @param    object  $obj    Container object to be output as string
  178.     * @access   public
  179.     * @return   string 
  180.     */
  181.     function toString(&$obj)
  182.     {
  183.         $indent '';
  184.         if (!$obj->isRoot()) {
  185.             // no indent for root
  186.             $this->_deep++;
  187.             $indent str_repeat($this->options['indent']$this->_deep);
  188.         else {
  189.             // Initialize string with xml declaration
  190.             $string '';
  191.             if ($this->options['addDecl']{
  192.                 $string .= XML_Util::getXMLDeclaration($this->options['version']$this->options['encoding']);
  193.                 $string .= $this->options['linebreak'];
  194.             }
  195.             if (!empty($this->options['name'])) {
  196.                 $string .= '<'.$this->options['name'].'>'.$this->options['linebreak'];
  197.                 $this->_deep++;
  198.                 $indent str_repeat($this->options['indent']$this->_deep);
  199.             }
  200.         }
  201.         if (!isset($string)) {
  202.             $string '';
  203.         }
  204.         switch ($obj->type{
  205.             case 'directive':
  206.                 $attributes ($this->options['useAttr']$obj->attributes : array();
  207.                 $string .= $indent.XML_Util::createTag($obj->name$attributes$obj->contentnull,
  208.                             ($this->options['useCData'? XML_UTIL_CDATA_SECTION : XML_UTIL_REPLACE_ENTITIES));
  209.                 $string .= $this->options['linebreak'];
  210.                 break;
  211.             case 'comment':
  212.                 $string .= $indent.'<!-- '.$obj->content.' -->';
  213.                 $string .= $this->options['linebreak'];
  214.                 break;
  215.             case 'section':
  216.                 if (!$obj->isRoot()) {
  217.                     $string $indent.'<'.$obj->name;
  218.                     $string .= ($this->options['useAttr']? XML_Util::attributesToString($obj->attributes'';
  219.                 }
  220.                 if ($children count($obj->children)) {
  221.                     if (!$obj->isRoot()) {
  222.                         $string .= '>'.$this->options['linebreak'];
  223.                     }
  224.                     for ($i = 0; $i $children$i++{
  225.                         $string .= $this->toString($obj->getChild($i));
  226.                     }
  227.                 }
  228.                 if (!$obj->isRoot()) {
  229.                     if ($children{
  230.                         $string .= $indent.'</'.$obj->name.'>'.$this->options['linebreak'];
  231.                     else {
  232.                         $string .= '/>'.$this->options['linebreak'];
  233.                     }
  234.                 else {
  235.                     if (!empty($this->options['name'])) {
  236.                         $string .= '</'.$this->options['name'].'>'.$this->options['linebreak'];
  237.                     }
  238.                 }
  239.                 break;
  240.             default:
  241.                 $string '';
  242.         }
  243.         if (!$obj->isRoot()) {
  244.             $this->_deep--;
  245.         }
  246.         return $string;
  247.     // end func toString
  248. // end class Config_Container_XML
  249. ?>

Documentation generated on Mon, 11 Mar 2019 15:42:05 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.