private $format;
private $context;
private $rootNodeName = 'response';
+ private $loadOptions;
/**
* Construct new XmlEncoder and allow to change the root node element name.
*
- * @param string $rootNodeName
+ * @param string $rootNodeName
+ * @param int|null $loadOptions A bit field of LIBXML_* constants
*/
- public function __construct($rootNodeName = 'response')
+ public function __construct($rootNodeName = 'response', $loadOptions = null)
{
$this->rootNodeName = $rootNodeName;
+ $this->loadOptions = null !== $loadOptions ? $loadOptions : LIBXML_NONET | LIBXML_NOBLANKS;
}
/**
libxml_clear_errors();
$dom = new \DOMDocument();
- $dom->loadXML($data, LIBXML_NONET | LIBXML_NOBLANKS);
+ $dom->loadXML($data, $this->loadOptions);
libxml_use_internal_errors($internalErrors);
libxml_disable_entity_loader($disableEntities);
$data = array();
foreach ($node->attributes as $attr) {
- if (ctype_digit($attr->nodeValue)) {
- $data['@'.$attr->nodeName] = (int) $attr->nodeValue;
- } else {
+ if (!is_numeric($attr->nodeValue)) {
$data['@'.$attr->nodeName] = $attr->nodeValue;
+
+ continue;
+ }
+
+ if (false !== $val = filter_var($attr->nodeValue, FILTER_VALIDATE_INT)) {
+ $data['@'.$attr->nodeName] = $val;
+
+ continue;
}
+
+ $data['@'.$attr->nodeName] = (float) $attr->nodeValue;
}
return $data;
*/
private function needsCdataWrapping($val)
{
- return preg_match('/[<>&]/', $val);
+ return 0 < preg_match('/[<>&]/', $val);
}
/**