Refbase update_2021-01-28_15_58
This commit is contained in:
174
includes/classes/org/active-link/xml/XMLDocument.php
Normal file
174
includes/classes/org/active-link/xml/XMLDocument.php
Normal file
@@ -0,0 +1,174 @@
|
||||
<?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;
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user