PageRenderTime 44ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/examples/iniloader/FluentDOMIniLoader.php

http://github.com/ThomasWeinert/FluentDOM
PHP | 58 lines | 50 code | 8 blank | 0 comment | 8 complexity | e43596ae2e80188d41dcc811702174a3 MD5 | raw file
  1. <?php
  2. require_once(dirname(__FILE__).'/../../src/FluentDOM/Loader.php');
  3. class FluentDOMIniLoader implements FluentDOMLoader {
  4. public function load($source, &$contentType) {
  5. if (is_string($source) &&
  6. in_array($contentType, array('ini', 'text/ini'))) {
  7. if (!file_exists($source)) {
  8. throw new InvalidArgumentException('File not found: '. $source);
  9. }
  10. $contentType = 'text/xml';
  11. if ($iniFile = parse_ini_file($source)) {
  12. $dom = new DOMDocument();
  13. $root = $dom->appendChild($dom->createElement('ini'));
  14. $this->_arrayToNodes($dom, $root, $iniFile);
  15. return $dom;
  16. }
  17. }
  18. return FALSE;
  19. }
  20. protected function _arrayToNodes(&$dom, &$node, $data) {
  21. if (is_array($data)) {
  22. foreach ($data as $key => $val) {
  23. if (preg_match('(^\d+$)', $key)) {
  24. $nodeName = $node->nodeName;
  25. if (substr($nodeName, -1) == 's') {
  26. $nodeName = substr($nodeName, 0, -1);
  27. }
  28. $childNode = $dom->createElement($nodeName);
  29. $this->_arrayToNodes($dom, $childNode, $val);
  30. $node->appendChild($childNode);
  31. } elseif (is_array($val)) {
  32. $childNode = $dom->createElement($key);
  33. $this->_arrayToNodes($dom, $childNode, $val);
  34. $node->appendChild($childNode);
  35. } elseif (preg_match('([\r\n\t])', $val)) {
  36. $childNode = $dom->createElement($key);
  37. $textNode = $dom->createTextNode($val);
  38. $childNode->appendChild($textNode);
  39. $node->appendChild($childNode);
  40. } else {
  41. $node->appendChild($dom->createElement($key, $val));
  42. }
  43. }
  44. } elseif (!empty($data)) {
  45. $textNode = $dom->createTextNode($data);
  46. $node->appendChild($textNode);
  47. }
  48. }
  49. }
  50. ?>