/** * Test unserializing from UTF-8 to ISO-8859-1 */ public function testUtf8ToIso() { $u = new XML_Unserializer(); $u->setOption(XML_UNSERIALIZER_OPTION_ENCODING_SOURCE, 'UTF-8'); $u->setOption(XML_UNSERIALIZER_OPTION_ENCODING_TARGET, 'ISO-8859-1'); $xml = '<xml>' . utf8_encode('A string containing ü ä Ãê') . '</xml>'; $u->unserialize($xml); $this->assertEquals('A string containing ü ä Ãê', $u->getUnserializedData()); }
/** * Test unserializing with a setter method */ public function testSetterMethod() { $u = new XML_Unserializer(); $u->setOption(XML_UNSERIALIZER_OPTION_COMPLEXTYPE, 'object'); $u->setOption(XML_UNSERIALIZER_OPTION_DEFAULT_CLASS, 'Foo'); $xml = '<SetterExample><foo>tomato</foo></SetterExample>'; $u->unserialize($xml); $result = new SetterExample(); $result->setFoo('tomato'); $this->assertEquals($result, $u->getUnserializedData()); }
/** * Test unserializing an indexed array */ public function testIndexed() { $u = new XML_Unserializer(); $u->setOption(XML_UNSERIALIZER_OPTION_COMPLEXTYPE, 'array'); $xml = '<xml><foo>bar</foo><foo>tomato</foo></xml>'; $u->unserialize($xml); $this->assertEquals(array('foo' => array('bar', 'tomato')), $u->getUnserializedData()); }
/** * Test unserializing a float */ public function testFloat() { $u = new XML_Unserializer(); $u->setOption(XML_UNSERIALIZER_OPTION_GUESS_TYPES, true); $xml = '<xml>453.54553</xml>'; $u->unserialize($xml); $this->assertEquals(453.54553, $u->getUnserializedData()); $xml = '<xml>-1.47</xml>'; $u->unserialize($xml); $this->assertEquals(-1.47, $u->getUnserializedData()); }
function randomPerson() { $dir = 'collectedData'; $files = glob($dir . '/*.*'); $file = array_rand($files); $us = new XML_Unserializer(); $options = array(XML_UNSERIALIZER_OPTION_TAG_MAP => array('util' => 'XML_Util'), XML_UNSERIALIZER_OPTION_ATTRIBUTE_CLASS => '_classname'); $us->setOptions($options); $us->setOption(XML_UNSERIALIZER_OPTION_COMPLEXTYPE, 'object'); $result = $us->unserialize($files[$file], true); return $us->_unserializedData; }
/** * Test keep behaviour */ public function testKeep() { $u = new XML_Unserializer(); $u->setOption(XML_UNSERIALIZER_OPTION_WHITESPACE, XML_UNSERIALIZER_WHITESPACE_KEEP); $u->unserialize($this->xml); $expected = array('string' => ' This XML document contains line breaks. '); $this->assertEquals($expected, $u->getUnserializedData()); }
public static function Decode($XMLResponse, &$isFault) { $responseXML = null; try { if (empty($XMLResponse)) { throw new Exception("Given Response is not a valid SOAP response."); } $xmlDoc = new XMLReader(); $res = $xmlDoc->XML($XMLResponse); if ($res) { $xmlDoc->read(); $responseXML = $xmlDoc->readOuterXml(); $xmlDOM = new DOMDocument(); $xmlDOM->loadXML($responseXML); $isFault = trim(strtoupper($xmlDoc->localName)) == self::$FaultMessage; if ($isFault) { $xmlDOM->loadXML($xmlDoc->readOuterXml()); } switch ($xmlDoc->nodeType) { case XMLReader::ELEMENT: $nodeName = $xmlDoc->localName; $prefix = $xmlDoc->prefix; if (class_exists($nodeName)) { $xmlNodes = $xmlDOM->getElementsByTagName($nodeName); foreach ($xmlNodes as $xmlNode) { //$xmlNode->prefix = ""; $xmlNode->setAttribute("_class", $nodeName); $xmlNode->setAttribute("_type", "object"); } } break; } $responseXML = $xmlDOM->saveXML(); $unserializer = new XML_Unserializer(); $unserializer->setOption(XML_UNSERIALIZER_OPTION_COMPLEXTYPE, 'object'); $res = $unserializer->unserialize($responseXML, false); if ($res) { $responseXML = $unserializer->getUnserializedData(); } $xmlDoc->close(); } else { throw new Exception("Given Response is not a valid XML response."); } } catch (Exception $ex) { throw new Exception("Error occurred while XML decoding"); } return $responseXML; }
function showReport($report) { if (isset($report)) { $xml = new \XML_Unserializer(); $xml->setOption(XML_UNSERIALIZER_OPTION_ATTRIBUTES_PARSE, TRUE); $xml->unserialize(__ROOT__ . "/reports/" . $report . ".xml", TRUE); if (\PEAR::isError($xml)) { die("ERROR: XML : Report Name: " . $report . " : MSG: " . $xml->getMessage()); } $this->XML = $xml->getUnserializedData(); if (\PEAR::isError($xml)) { die("ERROR: XML : Report Name: " . $report . " : MSG: " . $xml->getMessage()); } //Now get the tags we need to show the report info foreach ($this->XML as $key => $value) { switch ($key) { case 'title': $value = str_replace("\n", "<br>", $value); echo "<br><h1>{$value}</h1>\n"; break; case 'description': $value = str_replace("\n", "<br>", $value); echo "<p>{$value}</p>\n"; break; } } } echo "<br><h1>Previous Report Runs:</h1><br>\n"; if (isset($report)) { $sql = "SELECT * from reporting.report_log\n\t\t\t\tWHERE report_name='" . $report . "'\n\t\t\t\tORDER by report_startts desc"; } else { $sql = "SELECT * from reporting.report_log\n\t\t\t\tORDER by report_startts desc\n\t\t\t\tLIMIT 50"; } $result = run_sql($this->db, $sql); echo "\n<table class='log' width='1000px'>\n"; echo "<tr>\n"; if ($report == '') { echo "<th width='15%'> Report Name</th>\n"; echo "<th width='20%'> Time Stamp</th>\n"; echo "<th width='50%'> Parameters</th>\n"; echo "<th width='15%'> Status</th>\n"; } else { echo "<th width='20%'> Time Stamp</th>\n"; echo "<th width='65%'> Parameters</th>\n"; echo "<th width='15%'> Status</th>\n"; echo "</tr>\n"; } while ($row = db_fetch_assoc($result[0])) { echo "<tr>"; if ($report == '') { echo "<td><a href='report_view.php?_report=" . $row['report_name'] . "'>" . $row['report_name'] . "</a></td>\n"; echo "<td><a href='report_log.php?_report=" . $row['report_name'] . "&_cache=" . $row['report_startts'] . "'>" . $row['report_startts'] . "</a></td>\n"; } else { echo "<td><a href='report_log.php?_report=" . $report . "&_cache=" . $row['report_startts'] . "'>" . $row['report_startts'] . "</a></td>\n"; } echo "<td>" . $row['report_parms'] . "</td>\n"; if ($row['report_code'] == 0) { echo "<td style='{background-color: yellowgreen; vertical-align: top}'>Complete</td></tr>\n"; } elseif ($row['report_code'] == 4) { echo "<td style='background-color: orange; {vertical-align: top}'>Running</td></tr>\n"; } } echo "</table>\n"; }
public static function Decode($SOAPResponse, &$isSOAPFault) { $responseXML = ""; try { if (empty($SOAPResponse)) { throw new Exception("Given Response is not a valid SOAP response."); } $xmlDoc = new XMLReader(); $res = $xmlDoc->XML($SOAPResponse); if ($res) { while (trim(strtoupper($xmlDoc->localName)) != self::$SOAPBody) { $isNotEnd = $xmlDoc->read(); if (!$isNotEnd) { break; } } if (!$isNotEnd) { $isSOAPFault = true; $soapFault = new FaultMessage(); $errorData = new ErrorData(); $errorData->errorId = 'Given Response is not a valid SOAP response.'; $errorData->message = 'Given Response is not a valid SOAP response.'; $soapFault->error = $errorData; return $soapFault; } $responseXML = $xmlDoc->readInnerXml(); $xmlDOM = new DOMDocument(); $xmlDOM->loadXML($responseXML); $count = 0; $xmlDoc->read(); $isSOAPFault = trim(strtoupper($xmlDoc->localName)) == self::$SOAPFault; if ($isSOAPFault) { while (trim(strtoupper($xmlDoc->localName)) != self::$SOAPFaultMessage) { $isNotEnd = $xmlDoc->read(); if (!$isNotEnd) { break; } } $xmlDOM->loadXML($xmlDoc->readOuterXml()); } switch ($xmlDoc->nodeType) { case XMLReader::ELEMENT: $nodeName = $xmlDoc->localName; $prefix = $xmlDoc->prefix; if (class_exists($nodeName)) { $xmlNodes = $xmlDOM->getElementsByTagName($nodeName); foreach ($xmlNodes as $xmlNode) { //$xmlNode->prefix = ""; $xmlNode->setAttribute("_class", $nodeName); $xmlNode->setAttribute("_type", "object"); } } break; } $responseXML = $xmlDOM->saveXML(); $unserializer = new XML_Unserializer(); $unserializer->setOption(XML_UNSERIALIZER_OPTION_COMPLEXTYPE, 'object'); $res = $unserializer->unserialize($responseXML, false); if ($res) { $responseXML = $unserializer->getUnserializedData(); } $xmlDoc->close(); } else { throw new Exception("Given Response is not a valid SOAP response."); } } catch (Exception $ex) { throw $ex; throw new Exception("Error occurred while Soap decoding: " . $ex->getMessage()); } return $responseXML; }
function __construct($name, $parms) { $this->reportName = $name; $this->setReportTitle(); $this->csv = $this->reportName . "_" . date('Ymdhis') . ".csv"; // Parse the report $xml = new \XML_Unserializer(); $xml->setOption(XML_UNSERIALIZER_OPTION_ATTRIBUTES_PARSE, TRUE); $xml->unserialize(__ROOT__ . "/reports/" . $this->reportName . ".xml", TRUE); if (\PEAR::isError($xml)) { die("ERROR: XML : Report Name: " . $this->reportName . " : MSG: " . $xml->getMessage()); } $this->XML = $xml->getUnserializedData(); if (\PEAR::isError($xml)) { die("ERROR: XML : Report Name: " . $this->reportName . " : MSG: " . $xml->getMessage()); } // Check if it has a query if (!isset($this->XML['query'])) { die("ERROR: XML : Report Name: " . $this->reportName . " : MSG: This report has no query"); } else { $this->batch = FALSE; foreach ($this->XML as $key => $value) { switch ($key) { case 'query': if (isset($value[0])) { foreach ($value as $index => $query) { $q = new Query($query); $q->setReportName($name); $t = new Table($query); $t->csv = $this->csv; $t->reportName = $this->reportName; $this->queries[$q->name] = $q; $this->tables[$t->name] = $t; } } else { $q = new Query($value); $q->setReportName($name); $t = new Table($value); $t->csv = $this->csv; $t->reportName = $this->reportName; $this->queries[$q->name] = $q; $this->tables[$t->name] = $t; } break; case 'chart': if (isset($value[0])) { foreach ($value as $index => $chart) { $c = new Chart($chart); $this->charts[$c->name] = $c; } } else { $c = new Chart($value); $this->charts[$c->name] = $c; } break; case 'title': $this->title = $value; break; case 'description': $this->description = $value; break; case 'row': if (isset($value[0])) { foreach ($value as $index => $format) { $f = new Format($format); $this->formats[$f->columnName] = $f; } } else { $f = new Format($value); $this->formats[$f->columnName] = $f; } break; case 'column': if (isset($value[0])) { foreach ($value as $index => $format) { $f = new Format($format); $this->formats[$f->columnName] = $f; } } else { $f = new Format($value); $this->formats[$f->columnName] = $f; } break; case 'parm': $this->parms = new ReportParms($this->XML['parm']); $this->parms->setReportName($name); break; case 'batch': $this->batch = TRUE; break; } } } foreach ($this->tables as $key => $value) { $value->formats = $this->formats; } if (isset($this->charts)) { foreach ($this->charts as $key => $value) { $value->formats = $this->formats; } } //Check if the report has any parameters passed unset($parms['_report']); $this->passedParms = $parms; $this->nPassedParms = count($this->passedParms); foreach ($this->passedParms as $key => $value) { if (strpos(strtolower($value), 'yesterday') === FALSE) { } else { if (strpos($value, '-') > 0) { $days = substr($value, strpos($value, '-') + 1, strpos($value, 'd', strpos($value, '-')) - strpos($value, '-') - 1); $this->passedParms[$key] = date('Y-m-d', mktime(0, 0, 0, date("m"), date("d") - $days - 1, date("Y"))); } } $this->passedParms[$key] = str_ireplace('today', date('Y-m-d'), $this->passedParms[$key]); $this->passedParms[$key] = str_ireplace('yesterday-29d', date('Y-m-d', mktime(0, 0, 0, date("m"), date("d") - 30, date("Y"))), $this->passedParms[$key]); $this->passedParms[$key] = str_ireplace('yesterday', date('Y-m-d', mktime(0, 0, 0, date("m"), date("d") - 1, date("Y"))), $this->passedParms[$key]); } foreach ($this->queries as $index => $query) { $query->parms = new QueryParms($this->passedParms); } $fh = fopen("/tmp/" . $this->csv, "w") or die("ERROR: Could not open file..."); fwrite($fh, $this->title . "\n"); fwrite($fh, $this->reportName . "\n"); fwrite($fh, "{$this->description}\n"); fwrite($fh, "\n"); fwrite($fh, "Parameters Passed:\n"); foreach ($this->passedParms as $key => $value) { fwrite($fh, "{$key},{$value}\n"); } fwrite($fh, "\n"); fclose($fh); }
/** * 一覧表示 */ private function viewList(sfWebRequest $request, sfWebBrowser $b, $module_name) { $options = array('complexType' => 'array', 'parseAttributes' => TRUE); $Unserializer = new XML_Unserializer(); $Unserializer->setOption('parseAttributes', TRUE); $status = $Unserializer->unserialize($b->getResponseText()); $this->list = $Unserializer->getUnserializedData(); //検索結果が一件の場合 if (count($this->list['Response']['Placemark']) >= 1 && $this->list['Response']['Placemark']['id']) { sfApplicationConfiguration::getActive()->loadHelpers('geocodeParser'); $result = geocodeParser($this->list['Response']['Placemark']); $this->display_address = $result['address']; $request->setParameter('address', $result['address']); $request->setParameter('lon', $result['lon']); $request->setParameter('lat', $result['lat']); $this->setTemplate($module_name); } else { $this->module_name = $module_name; $this->setTemplate('searchList'); } }
/** * 連想配列の取得 * * <pre> * PHPの連想配列を指定すればそのまま、ファイルパスを指定すれば * 設定ファイルから読み込み連想配列として渡します。 * またURLのクエリー形式も使用できます。 * BEARで広く使われています。BEARの全てのクラスのコンストラクタ * (シングルトン含む)、リソースへの引数、 * オプションにこの連想配列フォーマットが使われます。 * * array -- 連想配列としてオプションが入力されます * * string -- ファイルから拡張子によりフォーマットが異なります * URLクエリー形式 ?foo1=bar1&hoge=fugaのようなフォーマットを連想配列にします * *.ini iniフォーマット * *.xml XMLフォーマット * *.php phpのdefineが連想配列として読み込まれます * *.yml yamlファイル * * $options * 'extention' string オーバーロード拡張子 * </pre> * * @param mixed $target ターゲット ファイルパス,URLなど * @param array $options オプション * * @return array * * @see http://pear.php.net/manual/ja/package.configuration.config.php * @see BEAR/test/files/example.ini * @see BEAR/test/files/example.xml * @see BEAR/test/files/example.php * @throws BEAR_Exception */ public static function loadValues($target, $options = array()) { if (!is_file((string) $target)) { // arrayならそのまま if (is_array($target) || is_object($target)) { return (array) $target; } // false | null なら 設定な if (!$target) { return null; } // クエリーがあるときはクエリーをパースした連想配列を返す $parseUrl = parse_url($target); if (isset($parseUrl['query'])) { $options = array(); parse_str($parseUrl['query'], $options); return $options; } else { return null; } } else { $cache = self::factory('BEAR_Cache'); $cache->setLife(BEAR_Cache::LIFE_UNLIMITED); $key = $target . filemtime($target); $cacheResult = $cache->get($key); if ($cacheResult) { return $cacheResult; } // PEAR::Configを使って設定ファイルをパース $pathinfo = pathinfo($target); // 相対パスなら絶対パスに (/:linux :win) $target = substr($target, 0, 1) == '/' || substr($target, 1, 1) == ':' ? $target : _BEAR_APP_HOME . '/App/Ro/' . $target; $extension = isset($options['extention']) ? $options['extention'] : $pathinfo['extension']; switch ($extension) { case 'yml': if (function_exists('syck_load')) { $content = file_get_contents($target); $yaml = syck_load($content); } else { include_once 'BEAR/vendors/spyc-0.2.5/spyc.php'; $yaml = Spyc::YAMLLoad($target); } $cache->set($key, $yaml); return $yaml; case 'csv': $conf = File_CSV::discoverFormat($target); $csv = array(); while ($fields = File_CSV::read($target, $conf)) { array_push($csv, $fields); } $result = $cache->set($key, $csv); return $csv; case 'ini': $parse = 'inicommented'; break; case 'xml': $unserializer = new XML_Unserializer(); $unserializer->setOption('parseAttributes', true); $xml = file_get_contents($target); $unserializer->unserialize($xml); $result = $unserializer->getUnserializedData(); return $result; break; case 'php': $parse = 'PHPConstants'; break; default: return file_get_contents($target, FILE_TEXT); break; } $config = new Config(); $root =& $config->parseConfig($target, $parse); if (PEAR::isError($root)) { $msg = '設定を読み込む際のエラー: '; $msg .= $root->getMessage(); $info = array('parse' => $parse, 'input' => $target); throw new BEAR_Exception($msg, compact('info')); return false; } else { $result = $root->toArray(); return $result['root']; } } }