Refbase update_2021-01-28_15_58
This commit is contained in:
42
includes/classes/org/active-link/xml/Branch.php
Normal file
42
includes/classes/org/active-link/xml/Branch.php
Normal file
@@ -0,0 +1,42 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
import("org.active-link.xml.Tree");
|
||||
|
||||
/**
|
||||
* Branch class is part of a Tree-Branch-Leaf trio
|
||||
* @class Branch
|
||||
* @package org.active-link.xml
|
||||
* @author Zurab Davitiani
|
||||
* @version 0.4.0
|
||||
* @extends Tree
|
||||
* @requires Tree
|
||||
* @see Tree, Leaf
|
||||
*/
|
||||
|
||||
class Branch extends Tree {
|
||||
|
||||
}
|
||||
|
||||
?>
|
70
includes/classes/org/active-link/xml/Leaf.php
Normal file
70
includes/classes/org/active-link/xml/Leaf.php
Normal file
@@ -0,0 +1,70 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
/**
|
||||
* Leaf class is part of a Tree-Branch-Leaf trio
|
||||
* @class Leaf
|
||||
* @package org.active-link.xml
|
||||
* @author Zurab Davitiani
|
||||
* @version 0.4.0
|
||||
* @see Tree, Branch
|
||||
*/
|
||||
|
||||
class Leaf {
|
||||
|
||||
// protected variables
|
||||
var $value;
|
||||
|
||||
/**
|
||||
* Constructor for the object
|
||||
* @method Leaf
|
||||
* @param optional mixed value
|
||||
* @returns none
|
||||
*/
|
||||
function Leaf($value = "") {
|
||||
$this->setValue($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets Leaf object value
|
||||
* @method getValue
|
||||
* @returns value of the object
|
||||
*/
|
||||
function getValue() {
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets Leaf object to the specified value
|
||||
* @method setValue
|
||||
* @param mixed value
|
||||
* @returns none
|
||||
*/
|
||||
function setValue($value) {
|
||||
$this->value = $value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
108
includes/classes/org/active-link/xml/RSS.php
Normal file
108
includes/classes/org/active-link/xml/RSS.php
Normal file
@@ -0,0 +1,108 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
import("org.active-link.xml.XML");
|
||||
|
||||
/**
|
||||
* Simple RSS class based on XML
|
||||
* @class RSS
|
||||
* @package org.active-link.xml
|
||||
* @author Zurab Davitiani
|
||||
* @version 0.4.0
|
||||
* @requires XML
|
||||
* @see XML
|
||||
*/
|
||||
|
||||
class RSS {
|
||||
|
||||
var $xml;
|
||||
var $rootTags;
|
||||
var $itemBranches;
|
||||
|
||||
/**
|
||||
* Constructor, parses the supplied RSS string into the object
|
||||
* @method RSS
|
||||
* @param string parseString
|
||||
* @returns none
|
||||
*/
|
||||
function RSS($parseString) {
|
||||
$this->xml = new XML($parseString);
|
||||
$this->rootTags = array("rss", "rdf:RDF");
|
||||
$this->itemBranches = array();
|
||||
$this->parseItemBranches();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns array of references to item branches of the RSS
|
||||
* @method getItemBranches
|
||||
* @returns array of references to objects of type XMLBranch (item branches of RSS)
|
||||
*/
|
||||
function getItemBranches() {
|
||||
return $this->itemBranches;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns HTML-formatted RSS items
|
||||
* @method getHTMLTitlesFormatted
|
||||
* @returns string HTML-formatted RSS items
|
||||
*/
|
||||
function getHTMLTitlesFormatted() {
|
||||
$itemBranchesXML = new XML("ul");
|
||||
reset($this->itemBranches);
|
||||
foreach($this->itemBranches as $newsItem) {
|
||||
$itemXML = new XMLBranch("li");
|
||||
$itemLinkXML = new XMLBranch("a");
|
||||
$itemLinkXML->setTagContent($newsItem->getTagContent("item/title"));
|
||||
$itemLinkXML->setTagAttribute("href", $newsItem->getTagContent("item/link"));
|
||||
$itemXML->addXMLBranch($itemLinkXML);
|
||||
$itemBranchesXML->addXMLBranch($itemXML);
|
||||
}
|
||||
return $itemBranchesXML->getXMLString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses RSS item branches, called from constructor
|
||||
* @method parseItemBranches
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function parseItemBranches() {
|
||||
$success = false;
|
||||
$rootTagName = $this->xml->getTagName();
|
||||
if(in_array($rootTagName, $this->rootTags)) {
|
||||
$tempBranches = array();
|
||||
if($rootTagName == "rss")
|
||||
$tempBranches = $this->xml->getBranches($rootTagName . "/channel", "item");
|
||||
elseif($rootTagName == "rdf:RDF")
|
||||
$tempBranches = $this->xml->getBranches($rootTagName, "item");
|
||||
if($tempBranches !== false) {
|
||||
$this->itemBranches = $tempBranches;
|
||||
$success = true;
|
||||
}
|
||||
}
|
||||
return $success;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
429
includes/classes/org/active-link/xml/Tag.php
Normal file
429
includes/classes/org/active-link/xml/Tag.php
Normal file
@@ -0,0 +1,429 @@
|
||||
<?php
|
||||
|
||||
/* Workaround by Richard Karnesky (refbase) for if ctype_alpha is missing */
|
||||
if(! function_exists('ctype_alpha')) {
|
||||
function ctype_alpha($string) {
|
||||
return (!preg_match('|[^\pL]|', $string));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
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
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tag class provides a base for parsing, modifying, outputting and creating XML tags
|
||||
* @class Tag
|
||||
* @package org.active-link.xml
|
||||
* @author Zurab Davitiani
|
||||
* @version 0.4.0
|
||||
* @see XML
|
||||
*/
|
||||
|
||||
class Tag {
|
||||
|
||||
// protected variables
|
||||
var $tagStartOpen;
|
||||
var $tagStartClose;
|
||||
var $tagClose;
|
||||
var $tagEndOpen;
|
||||
var $tagEndClose;
|
||||
var $tagName;
|
||||
var $tagContent;
|
||||
var $tagAttributes;
|
||||
var $tagAttributeSeparator;
|
||||
var $tagAttributeSeparators;
|
||||
var $tagAttributeAssignment;
|
||||
var $tagAttributeValueQuote;
|
||||
var $FORMAT_NONE;
|
||||
var $FORMAT_INDENT;
|
||||
var $tagFormat;
|
||||
var $tagFormatIndentLevel;
|
||||
var $tagFormatEndTag;
|
||||
var $tagFormatNewLine = "\n";
|
||||
var $tagFormatIndent = "\t";
|
||||
|
||||
/**
|
||||
* Constructor creates a tag object with the specified name and tag content
|
||||
* @method Tag
|
||||
* @param optional string name
|
||||
* @param optional string content
|
||||
* @returns none
|
||||
*/
|
||||
function Tag($name = "", $content = "") {
|
||||
$this->tagStartOpen = "<";
|
||||
$this->tagStartClose = ">";
|
||||
$this->tagClose = "/>";
|
||||
$this->tagEndOpen = "</";
|
||||
$this->tagEndClose = ">";
|
||||
$this->setTagName($name);
|
||||
$this->setTagContent($content);
|
||||
$this->tagAttributes = array();
|
||||
$this->tagAttributeSeparator = " ";
|
||||
$this->tagAttributeSeparators = array(" ", "\n", "\r", "\t");
|
||||
$this->tagAttributeAssignment = "=";
|
||||
$this->tagAttributeValueQuote = '"';
|
||||
$this->FORMAT_NONE = 0;
|
||||
$this->FORMAT_INDENT = 1;
|
||||
$this->tagFormat = $this->FORMAT_NONE;
|
||||
$this->tagFormatIndentLevel = 0;
|
||||
$this->tagFormatEndTag = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find out whether attribute exists
|
||||
* @method attributeExists
|
||||
* @param string attrName
|
||||
* @returns true if attribute exists, false otherwise
|
||||
*/
|
||||
function attributeExists($attrName) {
|
||||
return array_key_exists($attrName, $this->tagAttributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get attribute value by its name
|
||||
* @method getTagAttribute
|
||||
* @param string attrName
|
||||
* @returns string attribute value
|
||||
*/
|
||||
function getTagAttribute($attrName) {
|
||||
return $this->tagAttributes[$attrName];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tag content string
|
||||
* @method getTagContent
|
||||
* @returns string tag content
|
||||
*/
|
||||
function getTagContent() {
|
||||
return $this->tagContent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tag name string
|
||||
* @method getTagName
|
||||
* @returns string tag name
|
||||
*/
|
||||
function getTagName() {
|
||||
return $this->tagName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get complete tag string with its attributes and content
|
||||
* @method getTagString
|
||||
* @returns string tag string
|
||||
*/
|
||||
function getTagString() {
|
||||
$formatTagBegin = "";
|
||||
$formatTagEnd = "";
|
||||
$formatContent = "";
|
||||
if($this->tagFormat == $this->FORMAT_INDENT) {
|
||||
if($this->tagFormatIndentLevel > 0)
|
||||
$formatTagBegin = $this->tagFormatNewLine . str_repeat($this->tagFormatIndent, $this->tagFormatIndentLevel);
|
||||
if($this->tagFormatEndTag)
|
||||
$formatTagEnd = $this->tagFormatNewLine . str_repeat($this->tagFormatIndent, $this->tagFormatIndentLevel);
|
||||
}
|
||||
$tagString = $formatTagBegin . $this->getTagStringBegin() . $formatContent . $this->tagContent . $formatTagEnd . $this->getTagStringEnd();
|
||||
return $tagString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get beginning of the tag string, i.e. its name attributes up until tag contents
|
||||
* @method getTagStringBegin
|
||||
* @returns string beginning of the tag string
|
||||
*/
|
||||
function getTagStringBegin() {
|
||||
$tagString = "";
|
||||
if($this->tagName != "") {
|
||||
$tagString .= $this->tagStartOpen . $this->tagName;
|
||||
foreach($this->tagAttributes as $attrName => $attrValue) {
|
||||
$tagString .= $this->tagAttributeSeparator . $attrName . $this->tagAttributeAssignment . $this->tagAttributeValueQuote . $attrValue . $this->tagAttributeValueQuote;
|
||||
}
|
||||
if($this->tagContent == "")
|
||||
$tagString .= $this->tagAttributeSeparator . $this->tagClose;
|
||||
else
|
||||
$tagString .= $this->tagStartClose;
|
||||
}
|
||||
return $tagString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get ending of the tag string, i.e. its closing tag
|
||||
* @method getTagStringEnd
|
||||
* @returns string close tag if tag is not short-handed, empty string otherwise
|
||||
*/
|
||||
function getTagStringEnd() {
|
||||
$tagString = "";
|
||||
if($this->tagName != "" && $this->tagContent != "")
|
||||
$tagString .= $this->tagEndOpen . $this->tagName . $this->tagEndClose;
|
||||
return $tagString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove all tag attributes
|
||||
* @method removeAllAttributes
|
||||
* @returns none
|
||||
*/
|
||||
function removeAllAttributes() {
|
||||
$this->tagAttributes = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a tag attribute by its name
|
||||
* @method removeAttribute
|
||||
* @returns none
|
||||
*/
|
||||
function removeAttribute($attrName) {
|
||||
unset($this->tagAttributes[$attrName]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the tag object - set name, content to empty strings, and reset all attributes
|
||||
* @method resetTag
|
||||
* @returns none
|
||||
*/
|
||||
function resetTag() {
|
||||
$this->setTagName("");
|
||||
$this->setTagContent("");
|
||||
$this->removeAllAttributes();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create or modify an existing attribute by supplying attribute name and value
|
||||
* @method setAttribute
|
||||
* @param string attrName
|
||||
* @param string attrValue
|
||||
* @returns none
|
||||
*/
|
||||
function setAttribute($attrName, $attrValue) {
|
||||
$this->tagAttributes[$attrName] = $attrValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set contents of the tag
|
||||
* @method setTagContent
|
||||
* @param string content
|
||||
* @returns none
|
||||
*/
|
||||
function setTagContent($content) {
|
||||
$this->tagContent = $content;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set tag formatting option by specifying tagFormat to 0 (none), or 1 (indented)
|
||||
* @method setTagFormat
|
||||
* @param int tagFormat
|
||||
* @param optional int tagFormatIndentLevel
|
||||
* @returns none
|
||||
*/
|
||||
function setTagFormat($tagFormat, $tagFormatIndentLevel = 0) {
|
||||
$this->tagFormat = $tagFormat;
|
||||
$this->tagFormatIndentLevel = $tagFormatIndentLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set whether closing of the tag should be formatted or not
|
||||
* @method setTagFormatEndTag
|
||||
* @param optional boolean formatEndTag
|
||||
* @returns none
|
||||
*/
|
||||
function setTagFormatEndTag($formatEndTag = true) {
|
||||
$this->tagFormatEndTag = $formatEndTag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse a string containing a tag into the tag object, this will parse the first tag found
|
||||
* @method setTagFromString
|
||||
* @param string tagString
|
||||
* @returns array array of [0]=>index of the beginning of the tag, [1]=>index where tag ended
|
||||
*/
|
||||
function setTagFromString($tagString) {
|
||||
$i = 0;
|
||||
$j = 0;
|
||||
$tagStartOpen = $tagStartClose = $tagNameStart = $tagNameEnd = $tagContentStart = $tagContentEnd = $tagEndOpen = $tagEndClose = 0;
|
||||
$tagName = $tagContent = "";
|
||||
$tagShort = false;
|
||||
$tagAttributes = array();
|
||||
$success = true;
|
||||
$tagFound = false;
|
||||
while(!$tagFound && $i < strlen($tagString)) {
|
||||
// look for start tag character
|
||||
$i = strpos($tagString, $this->tagStartOpen, $i);
|
||||
if($i === false)
|
||||
break;
|
||||
// if tag name starts from alpha character we found the tag
|
||||
if(ctype_alpha(substr($tagString, $i + 1, 1)))
|
||||
$tagFound = true;
|
||||
// else continue searching
|
||||
else
|
||||
$i ++;
|
||||
}
|
||||
// if no tag found set success to false
|
||||
if(!$tagFound)
|
||||
$success = false;
|
||||
// if so far so good continue with found tag name
|
||||
if($success) {
|
||||
$tagStartOpen = $i;
|
||||
$tagNameStart = $i + 1;
|
||||
// search where tag name would end
|
||||
// search for a space separator to account for attributes
|
||||
$separatorPos = array();
|
||||
for($counter = 0; $counter < count($this->tagAttributeSeparators); $counter ++) {
|
||||
$separatorPosTemp = strpos($tagString, $this->tagAttributeSeparators[$counter], $tagStartOpen);
|
||||
if($separatorPosTemp !== false)
|
||||
$separatorPos[] = $separatorPosTemp;
|
||||
}
|
||||
//$i = strpos($tagString, $this->tagAttributeSeparator, $tagStartOpen);
|
||||
if(count($separatorPos) > 0)
|
||||
$i = min($separatorPos);
|
||||
else
|
||||
$i = false;
|
||||
// search for tag close character
|
||||
$j = strpos($tagString, $this->tagStartClose, $tagStartOpen);
|
||||
// search for short tag (no content)
|
||||
$k = strpos($tagString, $this->tagClose, $tagStartOpen);
|
||||
// if tag close character is not found then no tag exists, set success to false
|
||||
if($j === false)
|
||||
$success = false;
|
||||
// if tag short close found before tag close, then tag is short
|
||||
if($k !== false && $k < $j)
|
||||
$tagShort = true;
|
||||
}
|
||||
// if so far so good set tag name correctly
|
||||
if($success) {
|
||||
// if space separator not found or it is found after the tag close char
|
||||
if($i === false || $i > $j) {
|
||||
if($tagShort)
|
||||
$tagNameEnd = $k;
|
||||
else
|
||||
$tagNameEnd = $j;
|
||||
$tagStartClose = $j;
|
||||
}
|
||||
// else if tag attributes exist
|
||||
else {
|
||||
$tagNameEnd = $i;
|
||||
$tagStartClose = $j;
|
||||
// parse attributes
|
||||
$tagAttributesStart = $i + strlen($this->tagAttributeSeparator);
|
||||
$attrString = trim(substr($tagString, $tagAttributesStart, $j - $tagAttributesStart));
|
||||
$attrArray = explode($this->tagAttributeValueQuote, $attrString);
|
||||
$attrCounter = 0;
|
||||
while($attrCounter < count($attrArray) - 1) {
|
||||
$attributeName = trim(str_replace($this->tagAttributeAssignment, "", $attrArray[$attrCounter]));
|
||||
$attributeValue = $attrArray[$attrCounter + 1];
|
||||
$tagAttributes[$attributeName] = $attributeValue;
|
||||
$attrCounter += 2;
|
||||
}
|
||||
}
|
||||
$tagName = rtrim(substr($tagString, $tagNameStart, $tagNameEnd - $tagNameStart));
|
||||
if(!$tagShort) {
|
||||
$tagContentStart = $tagStartClose + 1;
|
||||
// look for ending of the tag after tag content
|
||||
$j = $tagContentStart;
|
||||
$tagCloseFound = false;
|
||||
// while loop will find the k-th tag close
|
||||
// start with one since we have one tag open
|
||||
$k = 1;
|
||||
while(!$tagCloseFound && $success) {
|
||||
// find k-th tag close from j
|
||||
$n = $j - 1;
|
||||
for($skip = 0; $skip < $k; $skip ++) {
|
||||
$n ++;
|
||||
$tempPos = strpos($tagString, $this->tagEndOpen . $tagName . $this->tagEndClose, $n);
|
||||
if($tempPos !== false)
|
||||
$n = $tempPos;
|
||||
else {
|
||||
$success = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// if success, find number of tag opens before the tag close
|
||||
$k = 0;
|
||||
if($success) {
|
||||
$tempString = substr($tagString, $j, $n - $j);
|
||||
$tempNewPos = 0;
|
||||
do {
|
||||
$tempPos = strpos($tempString, $this->tagStartOpen . $tagName, $tempNewPos);
|
||||
if($tempPos !== false) {
|
||||
$tempPosChar = substr($tempString, $tempPos + strlen($this->tagStartOpen . $tagName), 1);
|
||||
$tagEndArray = $this->tagAttributeSeparators;
|
||||
$tagEndArray[] = $this->tagEndClose;
|
||||
$tempPosTagEnded = array_search($tempPosChar, $tagEndArray);
|
||||
if($tempPosTagEnded !== false && $tempPosTagEnded !== NULL) {
|
||||
$tempStartClose = strpos($tempString, $this->tagStartClose, $tempPos);
|
||||
$tempStartShortClose = strpos($tempString, $this->tagClose, $tempPos);
|
||||
// if open tag found increase counter
|
||||
if($tempStartClose !== false && ($tempStartShortClose === false || $tempStartClose < $tempStartShortClose))
|
||||
$k ++;
|
||||
$tempNewPos = $tempPos + strlen($this->tagStartOpen . $tagName);
|
||||
}
|
||||
else
|
||||
$tempNewPos = $tempPos + strlen($this->tagStartOpen . $tagName);
|
||||
}
|
||||
} while($tempPos !== false);
|
||||
}
|
||||
// if no tags opened we found the tag close
|
||||
if($k == 0)
|
||||
$tagCloseFound = true;
|
||||
// else set new j
|
||||
else {
|
||||
$j = $n + strlen($this->tagEndOpen . $tagName . $this->tagEndClose);
|
||||
}
|
||||
}
|
||||
if($tagCloseFound)
|
||||
$i = $n;
|
||||
else
|
||||
$success = false;
|
||||
}
|
||||
}
|
||||
// if so far so good, then we have everything we need! set the object
|
||||
if($success) {
|
||||
if(!$tagShort) {
|
||||
$tagContentEnd = $i;
|
||||
$tagContent = trim(substr($tagString, $tagContentStart, $tagContentEnd - $tagContentStart));
|
||||
$tagEndOpen = $i;
|
||||
$tagEndClose = $tagEndOpen + strlen($this->tagEndOpen . $tagName . $this->tagEndClose);
|
||||
}
|
||||
else
|
||||
$tagEndClose = $tagStartClose + strlen($this->tagStartClose);
|
||||
$this->setTagName($tagName);
|
||||
$this->setTagContent($tagContent);
|
||||
$this->tagAttributes = $tagAttributes;
|
||||
}
|
||||
if($success)
|
||||
return array($tagStartOpen, $tagEndClose);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set tag name
|
||||
* @method setTagName
|
||||
* @param string name
|
||||
* @returns none
|
||||
*/
|
||||
function setTagName($name) {
|
||||
$this->tagName = $name;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
94
includes/classes/org/active-link/xml/Tree.php
Normal file
94
includes/classes/org/active-link/xml/Tree.php
Normal file
@@ -0,0 +1,94 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
/**
|
||||
* Tree class provides a base for Tree-Branch-Leaf trio
|
||||
* @class Tree
|
||||
* @package org.active-link.xml
|
||||
* @author Zurab Davitiani
|
||||
* @version 0.4.0
|
||||
* @see Branch, Leaf
|
||||
*/
|
||||
|
||||
class Tree {
|
||||
|
||||
// protected variables
|
||||
var $nodes;
|
||||
var $id = 0;
|
||||
|
||||
/**
|
||||
* Constructor for the object
|
||||
* @method Tree
|
||||
* @returns none
|
||||
*/
|
||||
function Tree() {
|
||||
$this->nodes = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds given node to the Tree
|
||||
* @method addNode
|
||||
* @param mixed id
|
||||
* @param mixed node
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function addNode($id, $node) {
|
||||
$success = true;
|
||||
if($id == -1)
|
||||
$this->nodes[] = $node;
|
||||
else
|
||||
if(isset($this->nodes[$id]))
|
||||
$success = false;
|
||||
else
|
||||
$this->nodes[$id] = $node;
|
||||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all nodes
|
||||
* @method removeAllNodes
|
||||
* @returns none
|
||||
*/
|
||||
function removeAllNodes () {
|
||||
$this->nodes = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes specified node from the Tree
|
||||
* @method removeNode
|
||||
* @param mixed id
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function removeNode($id) {
|
||||
$success = false;
|
||||
if(isset($this->nodes[$id])) {
|
||||
unset($this->nodes[$id]);
|
||||
$success = true;
|
||||
}
|
||||
return $success;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
580
includes/classes/org/active-link/xml/XML.php
Normal file
580
includes/classes/org/active-link/xml/XML.php
Normal file
@@ -0,0 +1,580 @@
|
||||
<?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
|
||||
*/
|
||||
|
||||
import("org.active-link.xml.Tag");
|
||||
import("org.active-link.xml.Tree");
|
||||
|
||||
/**
|
||||
* XML class provides a tree-like structure to read/write/modify XML
|
||||
* @class XML
|
||||
* @package org.active-link.xml
|
||||
* @author Zurab Davitiani
|
||||
* @version 0.4.0
|
||||
* @extends Tree
|
||||
* @requires Tag, Tree, XMLBranch, XMLLeaf
|
||||
* @see Tree
|
||||
*/
|
||||
|
||||
class XML extends Tree {
|
||||
|
||||
// protected variables
|
||||
var $tag;
|
||||
var $pathSeparator;
|
||||
|
||||
/**
|
||||
* If argument is an XML String it parses the string into XML object
|
||||
* If argument is a tag path, creates appropriate branches and tags
|
||||
* If argument is a simple string then sets that as a root tag name
|
||||
* @method XML
|
||||
* @param optional string argument
|
||||
* @returns none
|
||||
*/
|
||||
function XML($argument = "") {
|
||||
$success = false;
|
||||
$this->Tree();
|
||||
$this->pathSeparator = "/";
|
||||
$this->tag = new Tag();
|
||||
if(is_string($argument)) {
|
||||
// if this is an XML string to be parsed
|
||||
if(strpos($argument, $this->tag->tagEndOpen) > 0 || strpos($argument, $this->tag->tagClose) > 0)
|
||||
$this->parseFromString($argument);
|
||||
// else if this is a tag path to be created
|
||||
elseif(strpos($argument, $this->pathSeparator) > 0) {
|
||||
$tags = explode($this->pathSeparator, $argument);
|
||||
$this->tag->setTagName($tags[0]);
|
||||
$this->setTagContent("", $argument);
|
||||
}
|
||||
else
|
||||
$this->tag->setTagName($argument);
|
||||
$success = true;
|
||||
}
|
||||
else
|
||||
$success = false;
|
||||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds another XML tree as a branch to the current XML object
|
||||
* @method addXMLAsBranch
|
||||
* @param object xml
|
||||
* @param optional mixed id
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function addXMLAsBranch($xml, $id = -1) {
|
||||
$success = false;
|
||||
if(is_object($xml) && strtolower(get_class($xml)) == "xml") {
|
||||
$newBranch = new XMLBranch();
|
||||
$newBranch->nodes = $xml->nodes;
|
||||
$newBranch->tag = $xml->tag;
|
||||
$success = $this->addXMLBranch($newBranch, $id);
|
||||
}
|
||||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds XML Branch to the current XML object
|
||||
* @method addXMLBranch
|
||||
* @param object xmlBranch
|
||||
* @param optional mixed id
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function addXMLBranch($xmlBranch, $id = -1) {
|
||||
$success = false;
|
||||
if(is_object($xmlBranch) && strtolower(get_class($xmlBranch)) == "xmlbranch") {
|
||||
$xmlBranch->setParentXML($this);
|
||||
$success = $this->addNode($id, $xmlBranch);
|
||||
}
|
||||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds XML Leaf to the current XML object
|
||||
* @method addXMLLeaf
|
||||
* @param object xmlLeaf
|
||||
* @param optional mixed id
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function addXMLLeaf($xmlLeaf, $id = -1) {
|
||||
$success = false;
|
||||
if(is_object($xmlLeaf) && strtolower(get_class($xmlLeaf)) == "xmlleaf") {
|
||||
$xmlLeaf->setParentXML($this);
|
||||
$success = $this->addNode($id, $xmlLeaf);
|
||||
}
|
||||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves an array of references to XMLBranches within the specified path, tag name, attribute name, and attribute value
|
||||
* @method getBranches
|
||||
* @param optional string tagPath
|
||||
* @param optional string tagName
|
||||
* @param optional string attrName
|
||||
* @param optional string attrValue
|
||||
* @returns array of references to XMLBranch objects that meet specified criteria, or false if none found
|
||||
*/
|
||||
function getBranches($tagPath = "", $tagName = "", $attrName = "", $attrValue = "") {
|
||||
$branchArray = array();
|
||||
if($tagPath == "")
|
||||
$tagPath = $this->tag->getTagName();
|
||||
$tags = explode($this->pathSeparator, $tagPath);
|
||||
if($this->tag->getTagName() == $tags[0]) {
|
||||
if(count($tags) == 1) {
|
||||
$arrKeys = array_keys($this->nodes);
|
||||
for($index = 0; $index < count($arrKeys); $index ++) {
|
||||
if(gettype($this->nodes[$arrKeys[$index]]) == "object" && strtolower(get_class($this->nodes[$arrKeys[$index]])) == "xmlbranch") {
|
||||
if(($tagName == "" || $this->nodes[$arrKeys[$index]]->tag->getTagName() == $tagName) &&
|
||||
($attrName == "" || $this->nodes[$arrKeys[$index]]->tag->attributeExists($attrName)) &&
|
||||
($attrValue == "" || $this->nodes[$arrKeys[$index]]->tag->getTagAttribute($attrName) == $attrValue)) {
|
||||
$branchArray[] = &$this->nodes[$arrKeys[$index]];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$arrKeys = array_keys($this->nodes);
|
||||
for($index = 0; $index < count($arrKeys); $index ++) {
|
||||
if(gettype($this->nodes[$arrKeys[$index]]) == "object" && strtolower(get_class($this->nodes[$arrKeys[$index]])) == "xmlbranch") {
|
||||
if($this->nodes[$arrKeys[$index]]->tag->getTagName() == $tags[1]) {
|
||||
$newTagPath = implode($this->pathSeparator, array_slice($tags, 1));
|
||||
$newArray = $this->nodes[$arrKeys[$index]]->getBranches($newTagPath, $tagName, $attrName, $attrValue);
|
||||
if($newArray !== false)
|
||||
$branchArray = array_merge($branchArray, $newArray);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(count($branchArray) == 0)
|
||||
$branchArray = false;
|
||||
return $branchArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves an array of references to XMLLeaf(s) within the specified path
|
||||
* @method getLeafs
|
||||
* @param optional string tagPath
|
||||
* @returns array of references to XMLLeaf objects in specified tag path, false if none found
|
||||
*/
|
||||
function getLeafs($tagPath = "") {
|
||||
$leafArray = array();
|
||||
if($tagPath == "")
|
||||
$tagPath = $this->tag->getTagName();
|
||||
$tags = explode($this->pathSeparator, $tagPath);
|
||||
if($this->tag->getTagName() == $tags[0]) {
|
||||
if(count($tags) == 1) {
|
||||
$arrKeys = array_keys($this->nodes);
|
||||
for($index = 0; $index < count($arrKeys); $index ++) {
|
||||
if(gettype($this->nodes[$arrKeys[$index]]) == "object" && strtolower(get_class($this->nodes[$arrKeys[$index]])) == "xmlleaf") {
|
||||
$leafArray[] = &$this->nodes[$arrKeys[$index]];
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
$arrKeys = array_keys($this->nodes);
|
||||
for($index = 0; $index < count($arrKeys); $index ++) {
|
||||
if(gettype($this->nodes[$arrKeys[$index]]) == "object" && strtolower(get_class($this->nodes[$arrKeys[$index]])) == "xmlbranch") {
|
||||
if($this->nodes[$arrKeys[$index]]->tag->getTagName() == $tags[1]) {
|
||||
$newTagPath = implode($this->pathSeparator, array_slice($tags, 1));
|
||||
$newArray = $this->nodes[$arrKeys[$index]]->getLeafs($newTagPath);
|
||||
if($newArray !== false)
|
||||
$leafArray = array_merge($leafArray, $newArray);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(count($leafArray) == 0)
|
||||
$leafArray = false;
|
||||
return $leafArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns attribute value of the specified tag and tagpath
|
||||
* @method getTagAttribute
|
||||
* @param string attributeName
|
||||
* @param optional string tagPath
|
||||
* @returns attribute of the specified tag if successful, false otherwise
|
||||
*/
|
||||
function getTagAttribute($attributeName, $tagPath = "") {
|
||||
if($tagPath == "")
|
||||
$tagPath = $this->tag->getTagName();
|
||||
$tags = explode($this->pathSeparator, $tagPath);
|
||||
$attributeValue = false;
|
||||
if($this->tag->getTagName() == $tags[0]) {
|
||||
if(sizeof($tags) == 1) {
|
||||
if($this->tag->attributeExists($attributeName))
|
||||
$attributeValue = $this->tag->getTagAttribute($attributeName);
|
||||
}
|
||||
else {
|
||||
foreach($this->nodes as $node) {
|
||||
if(strtolower(get_class($node)) == "xmlbranch")
|
||||
if($node->tag->getTagName() == $tags[1]) {
|
||||
$newTagPath = implode($this->pathSeparator, array_slice($tags, 1));
|
||||
$attributeValue = $node->getTagAttribute($attributeName, $newTagPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $attributeValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns contents of the specified tag path
|
||||
* @method getTagContent
|
||||
* @param optional string tagPath
|
||||
* @returns content of the tag from the specified path if successful, false otherwise
|
||||
*/
|
||||
function getTagContent($tagPath = "") {
|
||||
if($tagPath == "")
|
||||
$tagPath = $this->tag->getTagName();
|
||||
$tags = explode($this->pathSeparator, $tagPath);
|
||||
$tagValue = false;
|
||||
if($this->tag->getTagName() == $tags[0]) {
|
||||
if(sizeof($tags) == 1)
|
||||
$tagValue = $this->getXMLContent();
|
||||
else {
|
||||
foreach($this->nodes as $node) {
|
||||
if(strtolower(get_class($node)) == "xmlbranch")
|
||||
if($node->tag->getTagName() == $tags[1]) {
|
||||
$newTagPath = implode($this->pathSeparator, array_slice($tags, 1));
|
||||
$tagValue = $node->getTagContent($newTagPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $tagValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the tag name of the current object
|
||||
* @method getTagName
|
||||
* @returns tag name
|
||||
*/
|
||||
function getTagName() {
|
||||
return($this->tag->getTagName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets contents from the current object
|
||||
* @method getXMLContent
|
||||
* @returns contents of the current XML tag
|
||||
*/
|
||||
function getXMLContent() {
|
||||
$xmlContent = "";
|
||||
foreach($this->nodes as $node) {
|
||||
if(gettype($node) == "object") {
|
||||
if(strtolower(get_class($node)) == "xmlbranch")
|
||||
$xmlContent .= $node->getXMLString();
|
||||
elseif(strtolower(get_class($node)) == "xmlleaf")
|
||||
$xmlContent .= $node->getValue();
|
||||
}
|
||||
}
|
||||
return $xmlContent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the whole XML string of the current object
|
||||
* @method getXMLString
|
||||
* @param optional mixed indent
|
||||
* @returns complete XML string of current object
|
||||
*/
|
||||
function getXMLString($indent = false) {
|
||||
$xmlString = "";
|
||||
$containsBranches = false;
|
||||
$containsLeafs = false;
|
||||
$newIndent = false;
|
||||
if($indent === false)
|
||||
$newIndent = false;
|
||||
else {
|
||||
$newIndent = $indent + 1;
|
||||
$this->tag->setTagFormat($this->tag->FORMAT_INDENT, $indent);
|
||||
}
|
||||
foreach($this->nodes as $node) {
|
||||
if(gettype($node) == "object") {
|
||||
if(strtolower(get_class($node)) == "xmlbranch") {
|
||||
$this->tag->tagContent .= $node->getXMLString($newIndent);
|
||||
$containsBranches = true;
|
||||
}
|
||||
elseif(strtolower(get_class($node)) == "xmlleaf") {
|
||||
$this->tag->tagContent .= $node->getValue();
|
||||
$containsLeafs = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if($containsBranches)
|
||||
$this->tag->setTagFormatEndTag(true);
|
||||
$xmlString = $this->tag->getTagString();
|
||||
$this->tag->setTagContent("");
|
||||
return $xmlString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find out whether the current object has any branches
|
||||
* @method hasBranch
|
||||
* @returns true if branches exist, false otherwise
|
||||
*/
|
||||
function hasBranch() {
|
||||
$hasBranch = false;
|
||||
foreach($this->nodes as $node) {
|
||||
if(strtolower(get_class($node)) == "xmlbranch") {
|
||||
$hasBranch = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $hasBranch;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find out whether the current object has any leaf(s)
|
||||
* @method hasLeaf
|
||||
* @returns true if leaf(s) exist, false otherwise
|
||||
*/
|
||||
function hasLeaf() {
|
||||
$hasLeaf = false;
|
||||
foreach($this->nodes as $node) {
|
||||
if(strtolower(get_class($node)) == "xmlleaf") {
|
||||
$hasLeaf = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $hasLeaf;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse entire XML string into the current object; also called from constructor
|
||||
* @method parseFromString
|
||||
* @param string parseString
|
||||
* @returns none
|
||||
*/
|
||||
function parseFromString($parseString) {
|
||||
$tagResult = $this->tag->setTagFromString($parseString);
|
||||
if($tagResult !== false) {
|
||||
$this->parseNodesFromTag();
|
||||
$this->tag->setTagContent("");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses the current tag content into Branches and Leaf(s); called from parseFromString
|
||||
* @method parseNodesFromTag
|
||||
* @returns none
|
||||
*/
|
||||
function parseNodesFromTag() {
|
||||
$tempTag = new Tag();
|
||||
$parseString = $this->tag->getTagContent();
|
||||
while($tagParsed = $tempTag->setTagFromString($parseString)) {
|
||||
if($tagParsed[0] != 0 && trim(substr($parseString, 0, $tagParsed[0]) != ""))
|
||||
$this->addXMLLeaf(new XMLLeaf(trim(substr($parseString, 0, $tagParsed[0]))));
|
||||
$branch = new XMLBranch();
|
||||
$tempTagCopy = new Tag();
|
||||
$tempTagCopy->setTagName($tempTag->getTagName());
|
||||
$tempTagCopy->tagAttributes = $tempTag->tagAttributes;
|
||||
$tempTagCopy->setTagContent($tempTag->getTagContent());
|
||||
$branch->setTag($tempTagCopy);
|
||||
$branch->parseNodesFromTag();
|
||||
$branch->tag->setTagContent("");
|
||||
$this->addXMLBranch($branch);
|
||||
$parseString = trim(substr($parseString, $tagParsed[1]));
|
||||
}
|
||||
if(strlen($parseString) > 0 && trim($parseString) != "")
|
||||
$this->addXMLLeaf(new XMLLeaf($parseString));
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all Branches from current object
|
||||
* @method removeAllBranches
|
||||
*/
|
||||
function removeAllBranches() {
|
||||
foreach($this->nodes as $key => $value) {
|
||||
if(strtolower(get_class($value)) == "xmlbranch")
|
||||
unset($this->nodes[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes all Leaf(s) from current object
|
||||
* @method removeAllLeafs
|
||||
*/
|
||||
function removeAllLeafs() {
|
||||
foreach($this->nodes as $key => $value) {
|
||||
if(strtolower(get_class($value)) == "xmlleaf")
|
||||
unset($this->nodes[$key]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes Branches with the specified criteria
|
||||
* @method removeBranches
|
||||
* @param optional string tagPath
|
||||
* @param optional string tagName
|
||||
* @param optional string attrName
|
||||
* @param optional string attrValue
|
||||
* @returns number of branches deleted
|
||||
*/
|
||||
function removeBranches($tagPath = "", $tagName = "", $attrName = "", $attrValue = "") {
|
||||
$branchesDeleted = 0;
|
||||
$referencedBranches = array();
|
||||
$tags = explode($this->pathSeparator, $tagPath);
|
||||
if(count($tags) > 1) {
|
||||
$parentTagName = array_pop($tags);
|
||||
$parentTagPath = implode($this->pathSeparator, $tags);
|
||||
$referencedBranches = $this->getBranches($parentTagPath, $parentTagName);
|
||||
}
|
||||
else {
|
||||
$referencedBranches[] = &$this;
|
||||
}
|
||||
for($i = 0; $i < count($referencedBranches); $i ++) {
|
||||
$arrKeys = array_keys($referencedBranches[$i]->nodes);
|
||||
for($index = 0; $index < count($arrKeys); $index ++) {
|
||||
if(gettype($referencedBranches[$i]->nodes[$arrKeys[$index]]) == "object" && strtolower(get_class($referencedBranches[$i]->nodes[$arrKeys[$index]])) == "xmlbranch") {
|
||||
if(($tagName == "" || $referencedBranches[$i]->nodes[$arrKeys[$index]]->tag->getTagName() == $tagName) &&
|
||||
($attrName == "" || $referencedBranches[$i]->nodes[$arrKeys[$index]]->tag->attributeExists($attrName)) &&
|
||||
($attrValue == "" || $referencedBranches[$i]->nodes[$arrKeys[$index]]->tag->getTagAttribute($attrName) == $attrValue)) {
|
||||
$referencedBranches[$i]->removeNode($arrKeys[$index]);
|
||||
$branchesDeleted ++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $branchesDeleted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets tag object of a branch specified by branch ID for the current object; see getBranches and setTag
|
||||
* @method setBranchTag
|
||||
* @param mixed branchId
|
||||
* @param object tag
|
||||
* @returns true on success, false otherwise
|
||||
*/
|
||||
function setBranchTag($branchId, $tag) {
|
||||
$success = true;
|
||||
if(strtolower(get_class($this->nodes[$branchId])) == "xmlbranch" && strtolower(get_class($tag)) == "tag")
|
||||
$this->nodes[$branchId]->setTag($tag);
|
||||
else
|
||||
$success = false;
|
||||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets tag object of the current object
|
||||
* @method setTag
|
||||
* @param object tag
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function setTag($tag) {
|
||||
$success = true;
|
||||
if(strtolower(get_class($tag)) == "tag")
|
||||
$this->tag = $tag;
|
||||
else
|
||||
$success = false;
|
||||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets an attribute name and value on an existing tag found via tagpath string
|
||||
* @method setTagAttribute
|
||||
* @param string attributeName
|
||||
* @param optional string attributeValue
|
||||
* @param optional string tagPath
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function setTagAttribute($attributeName, $attributeValue = "", $tagPath = "") {
|
||||
if($tagPath == "")
|
||||
$tagPath = $this->tag->getTagName();
|
||||
$success = true;
|
||||
$tags = explode($this->pathSeparator, $tagPath);
|
||||
if($this->tag->getTagName() == $tags[0]) {
|
||||
if(sizeof($tags) == 1)
|
||||
$this->tag->setAttribute($attributeName, $attributeValue);
|
||||
else {
|
||||
$nodeTagFound = false;
|
||||
reset($this->nodes);
|
||||
$arrKeys = array_keys($this->nodes);
|
||||
for($index = 0; $index < count($arrKeys); $index ++) {
|
||||
$node =& $this->nodes[$arrKeys[$index]];
|
||||
if(strtolower(get_class($node)) == "xmlbranch")
|
||||
if($node->tag->getTagName() == $tags[1]) {
|
||||
$newTagPath = implode($this->pathSeparator, array_slice($tags, 1));
|
||||
$success = $node->setTagAttribute($attributeName, $attributeValue, $newTagPath);
|
||||
$nodeTagFound = true;
|
||||
}
|
||||
}
|
||||
if(!$nodeTagFound)
|
||||
$success = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
$success = false;
|
||||
return $success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets content of the specified tag
|
||||
* @method setTagContent
|
||||
* @param mixed content
|
||||
* @param optional string tagPath
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function setTagContent($content, $tagPath = "") {
|
||||
if($tagPath == "")
|
||||
$tagPath = $this->tag->getTagName();
|
||||
$success = true;
|
||||
$tags = explode($this->pathSeparator, $tagPath);
|
||||
if($this->tag->getTagName() == $tags[0]) {
|
||||
if(sizeof($tags) == 1) {
|
||||
//$this->nodes = array(new XMLLeaf($content));
|
||||
$this->removeAllNodes();
|
||||
$this->addXMLLeaf(new XMLLeaf($content));
|
||||
}
|
||||
else {
|
||||
$nodeTagFound = false;
|
||||
reset($this->nodes);
|
||||
$arrKeys = array_keys($this->nodes);
|
||||
for($index = 0; $index < count($arrKeys); $index ++) {
|
||||
$node =& $this->nodes[$arrKeys[$index]];
|
||||
if(strtolower(get_class($node)) == "xmlbranch")
|
||||
if($node->tag->getTagName() == $tags[1]) {
|
||||
$newTagPath = implode($this->pathSeparator, array_slice($tags, 1));
|
||||
$success = $node->setTagContent($content, $newTagPath);
|
||||
$nodeTagFound = true;
|
||||
}
|
||||
}
|
||||
if(!$nodeTagFound) {
|
||||
$branch = new XMLBranch();
|
||||
$branch->setTag(new Tag($tags[1]));
|
||||
$newTagPath = implode($this->pathSeparator, array_slice($tags, 1));
|
||||
$branch->setTagContent($content, $newTagPath);
|
||||
$this->addXMLBranch($branch);
|
||||
}
|
||||
}
|
||||
}
|
||||
return $success;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
import("org.active-link.xml.XMLBranch");
|
||||
import("org.active-link.xml.XMLLeaf");
|
||||
|
||||
?>
|
71
includes/classes/org/active-link/xml/XMLBranch.php
Normal file
71
includes/classes/org/active-link/xml/XMLBranch.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?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 class
|
||||
*/
|
||||
import("org.active-link.xml.XML");
|
||||
|
||||
/**
|
||||
* XMLBranch class provides a tree-like structure to read/write/modify XML
|
||||
* @class XMLBranch
|
||||
* @package org.active-link.xml
|
||||
* @author Zurab Davitiani
|
||||
* @version 0.4.0
|
||||
* @extends XML
|
||||
* @requires XML
|
||||
* @see Tree
|
||||
*/
|
||||
|
||||
class XMLBranch extends XML {
|
||||
|
||||
var $parentXML;
|
||||
|
||||
/**
|
||||
* Gets parent object of the XML branch
|
||||
* @method getParentXML
|
||||
* @returns parent object of the XML branch
|
||||
*/
|
||||
function getParentXML() {
|
||||
return $this->parentXML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets parent object of the XML branch
|
||||
* @method setParentXML
|
||||
* @param object xml
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function setParentXML(&$xml) {
|
||||
$success = false;
|
||||
if(strtolower(get_class($xml)) == "xml" || strtolower(get_class($xml)) == "xmlbranch") {
|
||||
$this->parentXML = &$xml;
|
||||
$success = true;
|
||||
}
|
||||
return $success;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
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;
|
||||
}
|
||||
|
||||
}
|
73
includes/classes/org/active-link/xml/XMLLeaf.php
Normal file
73
includes/classes/org/active-link/xml/XMLLeaf.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?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 class
|
||||
*/
|
||||
import("org.active-link.xml.XML");
|
||||
import("org.active-link.xml.XMLBranch");
|
||||
import("org.active-link.xml.Leaf");
|
||||
|
||||
/**
|
||||
* XMLLeaf class provides means to store text values for use in XML tree
|
||||
* @class XMLLeaf
|
||||
* @package org.active-link.xml
|
||||
* @author Zurab Davitiani
|
||||
* @version 0.4.0
|
||||
* @extends Leaf
|
||||
* @requires Leaf
|
||||
* @see XML
|
||||
*/
|
||||
|
||||
class XMLLeaf extends Leaf {
|
||||
|
||||
var $parentXML;
|
||||
|
||||
/**
|
||||
* Gets parent object of the XML leaf
|
||||
* @method getParentXML
|
||||
* @returns parent object of the XML leaf
|
||||
*/
|
||||
function getParentXML() {
|
||||
return $this->parentXML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets parent object of the XML leaf
|
||||
* @method setParentXML
|
||||
* @param object xml
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function setParentXML(&$xml) {
|
||||
$success = false;
|
||||
if(strtolower(get_class($xml)) == "xml" || strtolower(get_class($xml)) == "xmlbranch") {
|
||||
$this->parentXML = &$xml;
|
||||
$success = true;
|
||||
}
|
||||
return $success;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
120
includes/classes/org/active-link/xml/XMLRPCClient.php
Normal file
120
includes/classes/org/active-link/xml/XMLRPCClient.php
Normal file
@@ -0,0 +1,120 @@
|
||||
<?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 HTTPClient, XML and XMLDocument classes
|
||||
*/
|
||||
|
||||
import("org.active-link.net.HTTPClient");
|
||||
import("org.active-link.xml.XML");
|
||||
import("org.active-link.xml.XMLDocument");
|
||||
|
||||
/**
|
||||
* XMLRPCClient class provides XML-RPC client capabilities
|
||||
* @class XMLRPCClient
|
||||
* @package org.active-link.xml
|
||||
* @author Zurab Davitiani
|
||||
* @version 0.4.0
|
||||
* @extends HTTPClient
|
||||
* @requires HTTPClient, XML, XMLDocument
|
||||
* @see HTTPClient
|
||||
*/
|
||||
|
||||
class XMLRPCClient extends HTTPClient {
|
||||
|
||||
var $xml;
|
||||
var $xmlDoc;
|
||||
var $params;
|
||||
|
||||
/**
|
||||
* XMLRPCClient client class constructor accepts host (required) and port (optional, default 80) arguments
|
||||
* @method XMLRPCClient
|
||||
* @param string host
|
||||
* @param optional int port
|
||||
*/
|
||||
function XMLRPCClient($host, $port = 80) {
|
||||
$this->HTTPClient($host, $port);
|
||||
$this->setRequestMethod("POST");
|
||||
$this->addRequestHeaderRaw("Content-type: text/xml");
|
||||
$this->xml = new XML("methodCall");
|
||||
$this->xml->setTagContent("", "methodCall/methodName");
|
||||
$this->xml->setTagContent("", "methodCall/params");
|
||||
$this->xmlDoc = new XMLDocument();
|
||||
$this->xmlDoc->setXML($this->xml);
|
||||
$paramsBranchArray = &$this->xml->getBranches("methodCall", "params");
|
||||
$this->params = &$paramsBranchArray[0];
|
||||
// this call not necessary if we can somehow update body before HTTPClient->sendRequest
|
||||
$this->setRequestBody($this->xmlDoc->getXMLString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a parameter to a method call in XMLRPC request
|
||||
* @method addParam
|
||||
* @param string paramType
|
||||
* @param mixed paramValue
|
||||
* @returns none
|
||||
*/
|
||||
function addParam($paramType, $paramValue) {
|
||||
$newParam = new XMLBranch("param");
|
||||
$newParam->setTagContent($paramValue, "param/value/$paramType");
|
||||
$this->params->addXMLBranch($newParam);
|
||||
// this call not necessary if we can somehow update body before HTTPClient->sendRequest
|
||||
$this->setRequestBody($this->xmlDoc->getXMLString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets method name in XMLRPC request
|
||||
* @method setMethodName
|
||||
* @param string methodName
|
||||
* @returns none
|
||||
*/
|
||||
function setMethodName ($methodName) {
|
||||
$this->xml->setTagContent($methodName, "methodCall/methodName");
|
||||
// this call not necessary if we can somehow update body before HTTPClient->sendRequest
|
||||
$this->setRequestBody($this->xmlDoc->getXMLString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets XMLRPC request by supplying an XMLDocument object
|
||||
* @method setRequestXML
|
||||
* @param object XMLDocument
|
||||
* @returns true if successful, false otherwise
|
||||
*/
|
||||
function setRequestXML(&$XMLDocument) {
|
||||
if(is_object($XMLDocument) && strtolower(get_class($XMLDocument)) == "xmldocument") {
|
||||
$this->xmlDoc = &$XMLDocument;
|
||||
$this->xml = &$this->xmlDoc->getXML();
|
||||
$this->params = &$this->xml->getBranches("methodCall", "params");
|
||||
// this call not necessary if we can somehow update body before HTTPClient->sendRequest
|
||||
$this->setRequestBody(htmlspecialchars($this->xmlDoc->getXMLString()));
|
||||
$success = true;
|
||||
}
|
||||
else
|
||||
$success = false;
|
||||
return $success;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
46
includes/classes/org/active-link/xml/XPath.php
Normal file
46
includes/classes/org/active-link/xml/XPath.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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 class
|
||||
*/
|
||||
|
||||
import("org.active-link.xml.XML");
|
||||
|
||||
/**
|
||||
* XPath class provides XPath interface to XML object
|
||||
* @class XPath
|
||||
* @package org.active-link.xml
|
||||
* @author Zurab Davitiani
|
||||
* @version 0.4.0
|
||||
* @see XML
|
||||
*/
|
||||
|
||||
class XPath {
|
||||
|
||||
var $xml;
|
||||
|
||||
}
|
||||
|
||||
?>
|
Reference in New Issue
Block a user