/examples/iniloader/FluentDOMIniLoader.php
PHP | 58 lines | 50 code | 8 blank | 0 comment | 8 complexity | e43596ae2e80188d41dcc811702174a3 MD5 | raw file
- <?php
- require_once(dirname(__FILE__).'/../../src/FluentDOM/Loader.php');
- class FluentDOMIniLoader implements FluentDOMLoader {
- public function load($source, &$contentType) {
- if (is_string($source) &&
- in_array($contentType, array('ini', 'text/ini'))) {
- if (!file_exists($source)) {
- throw new InvalidArgumentException('File not found: '. $source);
- }
- $contentType = 'text/xml';
- if ($iniFile = parse_ini_file($source)) {
- $dom = new DOMDocument();
- $root = $dom->appendChild($dom->createElement('ini'));
- $this->_arrayToNodes($dom, $root, $iniFile);
- return $dom;
- }
- }
- return FALSE;
- }
- protected function _arrayToNodes(&$dom, &$node, $data) {
- if (is_array($data)) {
- foreach ($data as $key => $val) {
- if (preg_match('(^\d+$)', $key)) {
- $nodeName = $node->nodeName;
- if (substr($nodeName, -1) == 's') {
- $nodeName = substr($nodeName, 0, -1);
- }
- $childNode = $dom->createElement($nodeName);
- $this->_arrayToNodes($dom, $childNode, $val);
- $node->appendChild($childNode);
- } elseif (is_array($val)) {
- $childNode = $dom->createElement($key);
- $this->_arrayToNodes($dom, $childNode, $val);
- $node->appendChild($childNode);
- } elseif (preg_match('([\r\n\t])', $val)) {
- $childNode = $dom->createElement($key);
- $textNode = $dom->createTextNode($val);
- $childNode->appendChild($textNode);
- $node->appendChild($childNode);
- } else {
- $node->appendChild($dom->createElement($key, $val));
- }
- }
- } elseif (!empty($data)) {
- $textNode = $dom->createTextNode($data);
- $node->appendChild($textNode);
- }
- }
- }
- ?>