Преобразование многомерного массива PHP в простой XML

Преобразование многомерного массива PHP в простой XML (без атрибутов), только пары ключ=>значение

Очень коротко и быстро, хочу представить Вашему вниманию, небольшой класс PHP для преобразования многомерных массивов PHP в простой (без атрибутов) XML.

Большое спасибо автору Кевину Ватерсону за сие творение, которое мы успешно используем в своём API.

Код класса
/**
 *
 * Array 2 XML class
 * Convert an array or multi-dimentional array to XML
 *
 * @author    Kevin Waterson (Спасибо!)
 * @copyright 2009 PHPRO.ORG
 *
 */
class Fw_Tools_Array2XML extends DomDocument
{

    public $nodeName;

    private $xpath;

    private $root;

    private $node_name;


    /**
     * Constructor, duh
     *
     * Set up the DOM environment
     *
     * @param    string $root     The name of the root node
     * @param    string $nod_name The name numeric keys are called
     *
     */
    public function __construct($root = 'root', $node_name = 'node')
    {
        parent::__construct();

        /*** set the encoding ***/
        $this->encoding = "ISO-8859-1";

        /*** format the output ***/
        $this->formatOutput = true;

        /*** set the node names ***/
        $this->node_name = $node_name;

        /*** create the root element ***/
        $this->root = $this->appendChild($this->createElement($root));

        $this->xpath = new DomXPath($this);
    }

    /*
    * creates the XML representation of the array
    *
    * @access    public
    * @param    array    $arr    The array to convert
    * @aparam    string    $node    The name given to child nodes when recursing
    *
    */
    public function createNode($arr, $node = null)
    {
        if (is_null($node)) {
            $node = $this->root;
        }
        foreach ($arr as $element => $value) {
            $element = is_numeric($element) ? $this->node_name : $element;

            $child = $this->createElement($element, (is_array($value) ? null : $value));
            $node->appendChild($child);

            if (is_array($value)) {
                self::createNode($value, $child);
            }
        }
    }

    /*
    * Return the generated XML as a string
    *
    * @access    public
    * @return    string
    *
    */
    public function __toString()
    {
        return $this->saveXML();
    }

    /*
    * array2xml::query() - perform an XPath query on the XML representation of the array
    * @param str $query - query to perform
    * @return mixed
    */
    public function query($query)
    {
        return $this->xpath->evaluate($query);
    }

}

Пример использования:
try {
    $xml = new Fw_Tools_Array2XML();
    $xml->createNode($sourceDataArray); // $sourceDataArray - массив исходных данных
    echo $xml;
} catch (Exception $e) {
    echo $e->getMessage();
}
  • +1
  • 30 декабря 2014, 12:55
  • igorrius

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
comments powered by Disqus