home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 August / PCWorld_2001-08_cd.bin / Komunikace / phptriad / phptriadsetup2-11.exe / php / pear / PHPDoc / xmlwriter / PhpdocXMLWriter.php
PHP Script  |  2001-02-18  |  5KB  |  174 lines

  1. <?php
  2. /**
  3. * Creates XML documents.
  4. * PHPDoc uses this helper class to generate xml documents. It's 
  5. * not much what this class can do but it provides some simple
  6. * functions to handle attributes and hides file handling tasks.
  7. * @version    $Id: PhpdocXMLWriter.php,v 1.4 2001/02/18 16:59:52 uw Exp $
  8. */
  9. class PhpdocXMLWriter extends PhpdocObject {
  10.     
  11.     /**
  12.     * Generated XML document.
  13.     *
  14.     * @var  string  $xml
  15.     */
  16.     var $xml = "";
  17.     
  18.     /**
  19.     * PHPDoc Warning object
  20.     *
  21.     * @var  object  PhpdocWarning
  22.     */
  23.     var $warn;
  24.     
  25.     /**
  26.     * Filehandler used for IO operations
  27.     *
  28.     * @var  object  PhpdocFilehandler
  29.     * @see  PhpdocXMLWriter()
  30.     */
  31.     var $fileHandler;
  32.     
  33.     /**
  34.     * Creates a new PhpdocFileHandler
  35.     *
  36.     * @see  $filehandler
  37.     */
  38.     function PhpdocXMLWriter() {
  39.         $this->fileHandler = new PhpdocFileHandler;
  40.     } // end constructor
  41.     
  42.     /**
  43.     * Clears the internal xml data buffer so that a new document can be passed to the object.
  44.     * @access    public
  45.     */
  46.     function free() {
  47.         $this->xml = "";
  48.     } // end func free
  49.     
  50.     /**
  51.     * Adds xml to the generated xml.
  52.     *
  53.     * @param    string  xml to append
  54.     * @access   public
  55.     */
  56.     function addXML($xml) {
  57.     
  58.         $this->xml.= $xml;
  59.             
  60.     } // end func addXML
  61.  
  62.     /**
  63.     * Saves the xml to the specified file.
  64.     *
  65.     * @param    string  Name of the target file
  66.     * @access   public
  67.     */    
  68.     function export($filename) {
  69.         return $this->fileHandler->createFile($filename, $this->xml);
  70.     } // end func export
  71.     
  72.     /**
  73.     * Adds an open (or single) xml tag to the generated xml.
  74.     *
  75.     * Use this function to add new elements/tags to the xml document. 
  76.     * The tagname and all attributenames will be converted to lowercase.
  77.     *
  78.     * @param    string  elementname (tagname)
  79.     * @param    string  value of the container: <name>value
  80.     * @param    array   Array of attributes: $attribs[n][type] = boolean|cdata, $attribs[n][value] = value
  81.     * @param    boolean Flag indication that you want an empty tag like <name/>.
  82.     * @access   public
  83.     * @see      endElement()
  84.     */
  85.     function startElement($name, $value = "", $attribs = "", $close = false) {
  86.     
  87.         $xml = "<" . strtolower($name);
  88.         
  89.         if (is_array($attribs)) {
  90.             
  91.             reset($attribs);
  92.             while (list($attrib, $data) = each($attribs)) {
  93.             
  94.                 $attrib = strtolower($attrib);
  95.                 $type = strtolower($data["type"]);
  96.                 
  97.                 switch($type) {
  98.                     case "boolean":
  99.                         $xml.= sprintf(' %s="%s"', $attrib, ($data["value"]) ? "true" : "false");
  100.                         break;
  101.                         
  102.                     case "cdata":
  103.                         $xml.= sprintf(' %s="%s"', $attrib, $this->xmlencode($data["value"]) );
  104.                         break;
  105.                 }
  106.             }
  107.             
  108.         } 
  109.         
  110.         if ($close) {
  111.         
  112.             $xml .= "/>";
  113.             
  114.         } else {
  115.         
  116.             $xml .= ">";
  117.             if ("" != $value)
  118.                 $xml .= $this->xmlencode($value);
  119.                 
  120.         }
  121.         
  122.         $this->xml .= $xml;
  123.         
  124.     } // end func startElement
  125.     
  126.     /**
  127.     * Adds a closing xml tag to the generated xml document.
  128.     *
  129.     * @param    string    Elementname (tagname)
  130.     * @access   public
  131.     * @see      startElement()
  132.     */
  133.     function endElement($name) {
  134.         $this->xml .= sprintf("</%s>", strtolower($name));
  135.     } // end func endElement
  136.     
  137.     /**
  138.     * Adds a complete xml container to the generated xml document.
  139.     *
  140.     * @param    string  Elementname (tagname)
  141.     * @param    string  Value
  142.     * @param    array   Attributes
  143.     * @access   public
  144.     * @see      startElement(), endElement()
  145.     */
  146.     function addElement($name, $value = "", $attribs = "") {
  147.         
  148.         if ("" == $value) {
  149.         
  150.             $this->startElement($name, $value, $attribs, true);
  151.             
  152.         } else {
  153.         
  154.             $this->startElement($name, $value, $attribs, false);
  155.             $this->endElement($name);
  156.             
  157.         }
  158.             
  159.     } // end func addElement
  160.     
  161.     /**
  162.     * Encodes XML values.
  163.     * @param    string  $value
  164.     * @return   string  $value
  165.     */
  166.     function xmlencode($value) {
  167. #        return preg_replace( array("@<@", "@>@", "@'@", '@"@', "@&@", "@" . PHPDOC_LINEBREAK ."@", "@\n@", "@\r@"), array("<", ">", "'", """, "&", ' ', ' ', ' '), $value);
  168.         return utf8_encode(preg_replace( array("@<@", "@>@", "@'@", '@"@', "@&@", "@" . PHPDOC_LINEBREAK . "@", "@\n@", "@\r@"), array("<", ">", "'", """, "&", ' ', ' ', ' '), $value));
  169.     } // end func xmlencode
  170.     
  171. } // end class PhpdocXMLWriter
  172. ?>