diff -r 000000000000 -r 4eba9c11703f web/Zend/InfoCard/Xml/Element.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/Zend/InfoCard/Xml/Element.php Mon Dec 13 18:29:26 2010 +0100 @@ -0,0 +1,107 @@ +asXML(); + } + + /** + * Converts an XML Element object into a DOM object + * + * @throws Zend_InfoCard_Xml_Exception + * @param Zend_InfoCard_Xml_Element $e The object to convert + * @return DOMElement A DOMElement representation of the same object + */ + static public function convertToDOM(Zend_InfoCard_Xml_Element $e) + { + $dom = dom_import_simplexml($e); + + if(!($dom instanceof DOMElement)) { + // Zend_InfoCard_Xml_Element exntes SimpleXMLElement, so this should *never* fail + // @codeCoverageIgnoreStart + require_once 'Zend/InfoCard/Xml/Exception.php'; + throw new Zend_InfoCard_Xml_Exception("Failed to convert between SimpleXML and DOM"); + // @codeCoverageIgnoreEnd + } + + return $dom; + } + + /** + * Converts a DOMElement object into the specific class + * + * @throws Zend_InfoCard_Xml_Exception + * @param DOMElement $e The DOMElement object to convert + * @param string $classname The name of the class to convert it to (must inhert from Zend_InfoCard_Xml_Element) + * @return Zend_InfoCard_Xml_Element a Xml Element object from the DOM element + */ + static public function convertToObject(DOMElement $e, $classname) + { + if (!class_exists($classname)) { + require_once 'Zend/Loader.php'; + Zend_Loader::loadClass($classname); + } + + $reflection = new ReflectionClass($classname); + + if(!$reflection->isSubclassOf('Zend_InfoCard_Xml_Element')) { + require_once 'Zend/InfoCard/Xml/Exception.php'; + throw new Zend_InfoCard_Xml_Exception("DOM element must be converted to an instance of Zend_InfoCard_Xml_Element"); + } + + $sxe = simplexml_import_dom($e, $classname); + + if(!($sxe instanceof Zend_InfoCard_Xml_Element)) { + // Since we just checked to see if this was a subclass of Zend_infoCard_Xml_Element this shoudl never fail + // @codeCoverageIgnoreStart + require_once 'Zend/InfoCard/Xml/Exception.php'; + throw new Zend_InfoCard_Xml_Exception("Failed to convert between DOM and SimpleXML"); + // @codeCoverageIgnoreEnd + } + + return $sxe; + } +}