diff options
| -rw-r--r-- | engine/classes/ElggPluginManifest.php | 2 | ||||
| -rw-r--r-- | engine/classes/ElggXMLElement.php | 115 | ||||
| -rw-r--r-- | engine/classes/XmlElement.php | 112 | ||||
| -rw-r--r-- | engine/lib/xml.php | 2 | 
4 files changed, 127 insertions, 104 deletions
diff --git a/engine/classes/ElggPluginManifest.php b/engine/classes/ElggPluginManifest.php index a4f5bb95d..6912c2b08 100644 --- a/engine/classes/ElggPluginManifest.php +++ b/engine/classes/ElggPluginManifest.php @@ -130,7 +130,7 @@ class ElggPluginManifest {  		}  		// see if we need to construct the xml object. -		if ($manifest instanceof XmlElement) { +		if ($manifest instanceof ElggXMLElement) {  			$manifest_obj = $manifest;  		} else {  			if (substr(trim($manifest), 0, 1) == '<') { diff --git a/engine/classes/ElggXMLElement.php b/engine/classes/ElggXMLElement.php new file mode 100644 index 000000000..65a13912c --- /dev/null +++ b/engine/classes/ElggXMLElement.php @@ -0,0 +1,115 @@ +<?php +/** + * A parser for XML that uses SimpleXMLElement + * + * @package    Elgg.Core + * @subpackage XML + */ +class ElggXMLElement { +	/** +	 * @var SimpleXMLElement +	 */ +	private $_element; + +	/** +	 * Creates an ElggXMLParser from a string or existing SimpleXMLElement +	 *  +	 * @param string|SimpleXMLElement $xml The XML to parse +	 */ +	public function __construct($xml) { +		if ($xml instanceof SimpleXMLElement) { +			$this->_element = $xml; +		} else { +			$this->_element = new SimpleXMLElement($xml); +		} +	} + +	/** +	 * @return string The name of the element +	 */ +	public function getName() { +		return $this->_element->getName(); +	} + +	/** +	 * @return array:string The attributes +	 */ +	public function getAttributes() { +		//include namespace declarations as attributes +		$xmlnsRaw = $this->_element->getNamespaces(); +		$xmlns = array(); +		foreach ($xmlnsRaw as $key => $val) { +			$label = 'xmlns' . ($key ? ":$key" : $key); +			$xmlns[$label] = $val; +		} +		//get attributes and merge with namespaces +		$attrRaw = $this->_element->attributes(); +		$attr = array(); +		foreach ($attrRaw as $key => $val) { +			$attr[$key] = $val; +		} +		$attr = array_merge((array) $xmlns, (array) $attr); +		$result = array(); +		foreach ($attr as $key => $val) { +			$result[$key] = (string) $val; +		} +		return $result; +	} + +	/** +	 * @return string CData +	 */ +	public function getContent() { +		return (string) $this->_element; +	} + +	/** +	 * @return array:ElggXMLElement Child elements +	 */ +	public function getChildren() { +		$children = $this->_element->children(); +		$result = array(); +		foreach ($children as $val) { +			$result[] = new ElggXMLElement($val); +		} + +		return $result; +	} + +	function __get($name) { +		switch ($name) { +			case 'name': +				return $this->getName(); +				break; +			case 'attributes': +				return $this->getAttributes(); +				break; +			case 'content': +				return $this->getContent(); +				break; +			case 'children': +				return $this->getChildren(); +				break; +		} +		return null; +	} + +	function __isset($name) { +		switch ($name) { +			case 'name': +				return $this->getName() !== null; +				break; +			case 'attributes': +				return $this->getAttributes() !== null; +				break; +			case 'content': +				return $this->getContent() !== null; +				break; +			case 'children': +				return $this->getChildren() !== null; +				break; +		} +		return false; +	} + +}
\ No newline at end of file diff --git a/engine/classes/XmlElement.php b/engine/classes/XmlElement.php index eb7987731..280bba664 100644 --- a/engine/classes/XmlElement.php +++ b/engine/classes/XmlElement.php @@ -6,107 +6,15 @@   * @subpackage XML   */  class XmlElement { -	/** -	* @var SimpleXMLElement -	 */ -	private $_element; -	 -	/** -	 * Creates XmlElement from string or existing SimpleXMLElement -	 * @param string|SimpleXMLElement $xml -	 */ -	public function __construct($xml) { -		if ($xml instanceof SimpleXMLElement) { -			$this->_element = $xml; -		} else { -			$this->_element = new SimpleXMLElement($xml); -		} -	} -	 -	/**  -	 * @return string The name of the element  -	 */ -	public function getName() { -		return $this->_element->getName(); -	} -	 -	/**  -	 * @return array:string The attributes  -	 */ -	public function getAttributes() { -		//include namespace declarations as attributes -		$xmlnsRaw = $this->_element->getNamespaces(); -		$xmlns = array(); -		foreach ($xmlnsRaw as $key => $val) { -			$label = 'xmlns'.($key?":$key":$key); -			$xmlns[$label] = $val; -		} -		//get attributes and merge with namespaces -		$attrRaw = $this->_element->attributes(); -		$attr = array(); -		foreach ($attrRaw as $key => $val) { -			$attr[$key] = $val; -		} -		$attr = array_merge((array)$xmlns, (array)$attr); -		$result = array(); -		foreach ($attr as $key => $val) { -			$result[$key] = (string)$val; -		} -		return $result; -	} -	 -	/**  -	 * @return string CData  -	 */ -	public function getContent() { -		return (string)$this->_element; -	} -	 -	/**  -	 * @return array:XmlElement Child elements  -	 */ -	public function getChildren() { -		$children = $this->_element->children(); -		$result = array(); -		foreach ($children as $val) { -			$result[] = new XmlElement($val); -		} -		return $result; -	} +	/** The name of the element */ +	public $name; -	function __get($name) { -		switch ($name) { -			case 'name': -				return $this->getName(); -				break; -			case 'attributes': -				return $this->getAttributes(); -				break; -			case 'content': -				return $this->getContent(); -				break; -			case 'children': -				return $this->getChildren(); -				break;		 -		} -		return null; -	} -	 -	function __isset($name) { -		switch ($name) { -			case 'name': -				return $this->getName()!==null; -				break; -			case 'attributes': -				return $this->getAttributes()!==null; -				break; -			case 'content': -				return $this->getContent()!==null; -				break; -			case 'children': -				return $this->getChildren()!==null; -				break; -		} -		return false; -	} +	/** The attributes */ +	public $attributes; + +	/** CData */ +	public $content; + +	/** Child elements */ +	public $children;  }; diff --git a/engine/lib/xml.php b/engine/lib/xml.php index 4f1ae76a9..ff82d7e8a 100644 --- a/engine/lib/xml.php +++ b/engine/lib/xml.php @@ -107,5 +107,5 @@ function serialise_array_to_xml(array $data, $n = 0) {   * @return object   */  function xml_to_object($xml) { -	return new XmlElement($xml); +	return new ElggXMLElement($xml);  }  | 
