XML.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. /**
  3. * XML
  4. *
  5. * Converts any variable type (arrays, objects, strings) to a SimpleXML object.
  6. *
  7. * @package MicroMVC
  8. * @author David Pennington
  9. * @copyright (c) 2011 MicroMVC Framework
  10. * @license http://micromvc.com/license
  11. ********************************** 80 Columns *********************************
  12. */
  13. namespace Micro;
  14. class XML
  15. {
  16. /**
  17. * Convert any given variable into a SimpleXML object
  18. *
  19. * @param mixed $object variable object to convert
  20. * @param string $root root element name
  21. * @param object $xml xml object
  22. * @param string $unknown element name for numeric keys
  23. * @param string $doctype XML doctype
  24. */
  25. public static function from($object, $root = 'data', $xml = NULL, $unknown = 'element', $doctype = "<?xml version = '1.0' encoding = 'utf-8'?>")
  26. {
  27. if(is_null($xml))
  28. {
  29. $xml = simplexml_load_string("$doctype<$root/>");
  30. }
  31. foreach((array) $object as $k => $v)
  32. {
  33. if(is_int($k))
  34. {
  35. $k = $unknown;
  36. }
  37. if(is_scalar($v))
  38. {
  39. $xml->addChild($k, h($v));
  40. }
  41. else
  42. {
  43. $v = (array) $v;
  44. $node = array_diff_key($v, array_keys(array_keys($v))) ? $xml->addChild($k) : $xml;
  45. self::from($v, $k, $node);
  46. }
  47. }
  48. return $xml;
  49. }
  50. }
  51. // END