Overview

Namespaces

  • Faulancer
    • Controller
    • Exception
    • Form
      • Validator
        • Type
    • Helper
      • Reflection
    • Http
    • Mail
    • ORM
      • User
    • Service
      • Factory
    • ServiceLocator
    • Session
    • View
      • Helper

Classes

  • AbstractHttp
  • Http
  • JsonResponse
  • XmlResponse
  • Overview
  • Namespace
  • Class
 1:  2:  3:  4:  5:  6:  7:  8:  9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 
<?php
/**
 * Class XmlResponse | XmlResponse.php
 * @package Faulancer\Http
 * @author  Florian Knapp <office@florianknapp.de>
 */
namespace Faulancer\Http;

/**
 * Class XmlResponse
 */
class XmlResponse extends Response
{

    /** @var array  */
    protected $content = [];

    /**
     * @param array             $data
     * @param \SimpleXMLElement $xml
     */
    private function convertArrayToXml(\SimpleXMLElement &$xml, $data)
    {
        foreach ($data as $key=>$value) {

            if(is_numeric($key)) {
                $key = 'item' . $key;
            }

            if(is_array($value['value'])) {

                $node = $this->generateNode($xml, $key, $value);
                $this->convertArrayToXml($node, $value['value']);

            } else {
                $this->generateNode($xml, $key, $value);
            }

        }
    }

    /**
     * @param \SimpleXMLElement $xml
     * @param string            $key
     * @param null|array        $value
     * @return null|\SimpleXMLElement
     */
    private function generateNode(\SimpleXMLElement &$xml, $key, $value = null)
    {
        $node = null;

        if (is_array($value) && in_array('@attributes', array_keys($value))) {

            $attributes = $value['@attributes'];

            if (!is_array($value['value'])) {
                $node = $xml->addChild($key, htmlspecialchars($value['value']));
            } else {
                $node = $xml->addChild($key);
            }

            foreach ($attributes as $attr => $val) {
                $node->addAttribute($attr, $val);
            }

        }

        return $node;
    }

    /**
     * @param array $content
     * @return self
     */
    public function setContent($content = [])
    {
        $this->setResponseHeader(['Content-Type' => 'text/xml']);

        $xml = new \SimpleXMLElement('<?xml version="1.0"?><root></root>');
        $this->convertArrayToXml($xml, $content);
        $result = $xml->asXml();

        $this->content = $result;
        return $this;
    }

}
API documentation generated by ApiGen