![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/Xml/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\Xml; class Generator { /** * This value is used to replace numeric keys while formatting data for xml output. */ const DEFAULT_ENTITY_ITEM_NAME = 'item'; /** * @var \DOMDocument|null */ protected $_dom = null; /** * @var \DOMDocument */ protected $_currentDom; /** * @var string */ protected $_defaultIndexedArrayItemName; /** * */ public function __construct() { $this->_dom = new \DOMDocument('1.0'); $this->_dom->formatOutput = true; $this->_currentDom = $this->_dom; return $this; } /** * @return \DOMDocument|null */ public function getDom() { return $this->_dom; } /** * @return \DOMDocument */ protected function _getCurrentDom() { return $this->_currentDom; } /** * @param \DOMDocument $node * @return $this */ protected function _setCurrentDom($node) { $this->_currentDom = $node; return $this; } /** * @param array $content * @return $this * @throws \DOMException * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function arrayToXml($content) { $parentNode = $this->_getCurrentDom(); if (!$content || !count($content)) { return $this; } foreach ($content as $_key => $_item) { $node = $this->getDom()->createElement(preg_replace('/[^\w-]/i', '', $_key)); $parentNode->appendChild($node); if (is_array($_item) && isset($_item['_attribute'])) { if (is_array($_item['_value'])) { if (isset($_item['_value'][0])) { foreach ($_item['_value'] as $_v) { $this->_setCurrentDom($node)->arrayToXml($_v); } } else { $this->_setCurrentDom($node)->arrayToXml($_item['_value']); } } else { $child = $this->getDom()->createTextNode($_item['_value']); $node->appendChild($child); } foreach ($_item['_attribute'] as $_attributeKey => $_attributeValue) { $node->setAttribute($_attributeKey, $_attributeValue); } } elseif (is_string($_item)) { $text = $this->getDom()->createTextNode($_item); $node->appendChild($text); } elseif (is_array($_item) && !isset($_item[0])) { $this->_setCurrentDom($node)->arrayToXml($_item); } elseif (is_array($_item) && isset($_item[0])) { foreach ($_item as $v) { $this->_setCurrentDom($node)->arrayToXml([$this->_getIndexedArrayItemName() => $v]); } } } return $this; } /** * @return string */ public function __toString() { return $this->getDom()->saveXML(); } /** * @param string $file * @return $this */ public function save($file) { $this->getDom()->save($file); return $this; } /** * Set xml node name to use instead of numeric index during numeric arrays conversion. * * @param string $name * @return $this */ public function setIndexedArrayItemName($name) { $this->_defaultIndexedArrayItemName = $name; return $this; } /** * Get xml node name to use instead of numeric index during numeric arrays conversion. * * @return string */ protected function _getIndexedArrayItemName() { return $this->_defaultIndexedArrayItemName ?? self::DEFAULT_ENTITY_ITEM_NAME; } }