aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/classes/ElggPluginManifest.php2
-rw-r--r--engine/classes/ElggXMLElement.php115
-rw-r--r--engine/classes/XmlElement.php112
-rw-r--r--engine/lib/xml.php2
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);
}