|
|
- <?php
-
- /*
- This file is part of ActiveLink PHP XML Package (www.active-link.com).
- Copyright (c) 2002-2004 by Zurab Davitiani
-
- You can contact the author of this software via E-mail at
- hattrick@mailcan.com
-
- ActiveLink PHP XML Package is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2.1 of the License, or
- (at your option) any later version.
-
- ActiveLink PHP XML Package is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with ActiveLink PHP XML Package; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
- /*
- * requires XML, Tag and File classes
- */
- import("org.active-link.xml.XML");
- import("org.active-link.sys.File");
- import("org.active-link.xml.Tag");
-
- /**
- * XMLDocument class provides a document class for XML
- * @class XMLDocument
- * @package org.active-link.xml
- * @author Zurab Davitiani
- * @version 0.4.0
- * @extends File
- * @requires File, XML, Tag
- * @see XML
- */
-
- class XMLDocument extends File {
-
- // protected variables
- var $xml;
- var $tag;
-
- /**
- * If filename is set and fileOpenMode is one of the modes that allows file to be read then file is opened and its contents parsed
- * If filename is set and fileOpenMode is something other than above the appropriate file is opened/created
- * If filename is not set then no files are opened/parsed/created and object contains default values
- * @method XMLDocument
- * @param optional string filename
- * @param optional string fileOpenMode
- */
- function XMLDocument($filename = "", $fileOpenMode = "r") {
- $success = $this->File($filename, $fileOpenMode);
- $this->tag = new Tag();
- $this->tag->tagStartOpen = "<?";
- $this->tag->tagClose = "?>";
- if($this->connected && ($this->fileOpenMode == $this->fileOpenModeRead || $this->fileOpenMode == $this->fileOpenModeReadWrite)) {
- $fileContents = $this->getContents();
- $this->close();
- $this->parseFromString($fileContents);
- }
- else {
- $this->setDefaultXMLTag();
- $this->xml = new XML();
- }
- return $success;
- }
-
- /**
- * Returns the XML object containing actual XML tree; in PHP 4 make sure to use =& to get a reference instead of a copy
- * @method getXML
- * @returns object of type XML containing actual XML tree
- */
- function getXML() {
- return $this->xml;
- }
-
- /**
- * Returns the XML string of a complete XML document
- * @method getXMLString
- * @returns string containing contents of XML document
- */
- function getXMLString() {
- $xmlString = $this->tag->getTagString();
- $xmlString .= "\n\n";
- $xmlString .= $this->xml->getXMLString(0);
- return $xmlString;
- }
-
- /**
- * Parses XML document from supplied string, also called from constructor when parsing file contents
- * @method parseFromString
- * @param string XMLDocString
- * @returns none
- */
- function parseFromString($XMLDocString) {
- $tagPos = $this->tag->setTagFromString($XMLDocString);
- if($tagPos === false) {
- $tagPos = array(0 => 0, 1 => 0);
- $this->setDefaultXMLTag();
- }
- $xmlContents = trim(substr($XMLDocString, $tagPos[1]));
- $this->xml = new XML($xmlContents);
- }
-
- /**
- * Saves document contents to a supplied filename
- * @method save
- * @param string filename
- * @returns true if successful, false otherwise
- */
- function save($filename) {
- $success = $this->open($filename, $this->fileOpenModeWrite);
- if($success) {
- $bytesWritten = $this->write($this->getXMLString());
- if($bytesWritten <= 0)
- $success = false;
- $this->close();
- }
- return $success;
- }
-
- /**
- * (Re)sets XML version/encoding to default values
- * @method setDefaultXMLTag
- * @returns none
- */
- function setDefaultXMLTag() {
- $this->tag->setTagName("xml");
- $this->tag->setAttribute("version", "1.0");
- $this->tag->setAttribute("encoding", "UTF-8");
- }
-
- /**
- * Sets encoding of the XML document
- * @method setEncoding
- * @param string encoding
- * @returns none
- */
- function setEncoding($encoding) {
- $this->tag->setAttribute("encoding", $encoding);
- }
-
- /**
- * Sets version of the XML document
- * @method setVersion
- * @param string version
- * @returns none
- */
- function setVersion($version) {
- $this->tag->setAttribute("version", $version);
- }
-
- /**
- * Sets XML object of the XMLDocument, sets/changes/updates XML content to the supplied XML tree, uses reference no copy is created
- * @method setXML
- * @param object xml
- * @returns true if successful, false otherwise
- */
- function setXML(&$xml) {
- $success = false;
- if(gettype($xml) == "object" && strtolower(get_class($xml)) == "xml") {
- $this->xml = &$xml;
- $success = true;
- }
- return $success;
- }
-
- }
|