У меня есть класс оболочки для создания xml-файла, и я не знаю, как переписать метод add() для правильной работы. Переменная SHOPITEM должна быть родительским элементом, но я не знаю, как ее использовать в методе добавления.PHP Вызов неопределенного метода DOMElement
Любые советы приветствуются
class Items {
const XML_VERSION enter code here= '1.0';
const XML_ENCODING = 'utf-8';
const SHOP = 'SHOP';
private $xml, $xmlElement;
public function __construct() {
$this->xml = new DOMDocument(self::XML_VERSION, self::XML_ENCODING);
//$this->xml->preserveWhiteSpace = false;
$this->xml->formatOutput = true;
$this->xmlElement = $this->create(self::SHOP);
}
public function create($nodeName, $value = null) {
return $this->xml->createElement($nodeName, $value);
}
public function add($object) {
return $this->xmlElement->appendChild($object);
}
public function write() {
$this->xml->appendChild($this->xmlElement);
$this->xml->save("test.xml");
}
}
$items = new Items();
$SHOPITEM = $items->create('SHOPITEM');
$product1 = $items->create('Product1', 'Some value 1');
$product2 = $items->create('Product2', 'Some value 2');
//this wont work
$SHOPITEM->add($product1);
//this works
$items->add($product1);
$items->add($product2);
//this works
$items->add($SHOPITEM);
$items->write();
Можете ли вы дать мне совет, пожалуйста, как переписать мой метод, так что я могу использовать метод добавления? – Rataja
Насколько я понимаю логику, которую вы пытались реализовать (или, по крайней мере, это так), ваш класс 'Itmes' должен представлять XML-документ, который будет содержать один элемент' SHOP', который будет содержать некоторые другие элементы. Если это так, значит, у вас есть xmldoc с корневым элементом 'SHOP', а не только простые элементы в нем, ни один из них не будет узлами для хранения других элементов. Если все выше, чем вы намеревались, вы можете просто использовать метод 'add ($ object)' и предоставить для него некоторый 'DOMElement' в качестве аргумента. Вы можете использовать метод 'create' для создания таких элементов. – xmike
И многое другое: если вам нравится работать с структурой xml через некоторую оболочку, чем искать ее, и реализовать оболочку, которая принимает только ваши абстракции, поэтому вы не имеете дело с DOMElemets при добавлении процесса или создании процесса или что-то еще. Если не так - используйте простые PHP-возможности для работы xml напрямую. Смешение обоих подходов сбивает с толку, потому что одна часть становится более абстрактной, чем другая. – xmike