SimpleXML - добавить новый узел, используя ранее объявленное пространство имен - как?
Я хотел бы добавить ребенка, на очень конкретном месте (так я также использую DOM, а не только SimpleXML) для <domain:create>
узла.
Я попытался использовать атрибут $ ns для конструкции simpleXML.
$nsNode = new SimpleXMLElement('<domain:ns>', $options = 0, $ns='urn:ietf:params:xml:ns:domain-1.0');
//transform the target into dom object for manipulation
$nodeRegistrantDom = dom_import_simplexml($nodeRegistrant);
Но я получаю:
предупреждениеI/O: не удалось загрузить внешний Entity
"<domain:ns>"
Я пытался зарегистрировать префикс после создания элемента, , но после этого я не использую xpath, поэтому это была совершенно бесполезная попытка ...
//creates the simpleXML object node to be inserted.
$nsNode = new SimpleXMLElement('<ns/>');
//this will not work, because we will not use xpath after it :s
$nsNode->registerXPathNamespace('domain', 'urn:ietf:params:xml:ns:domain-1.0');
Поскольку xml загружен из файла и этот файл, объявленный этим ns, может быть, мы должны его захватить из этого файла?
Вот общая вышеперечисленное, так что мы можем лучше понять контекст: Мы загружаем XML-файл, который содержит общую структуру:
$xmlObj = simplexml_load_file('EppCreateDomain.xml');
Они мы захватить элемент, который мы использование в качестве цели:
//grab the target.
$nodeRegistrant = $xmlObj->command->create->children(self::OBJ_URI_DOMAIN)->create->registrant;
//transform the target into a dom object for later manipulation
$nodeRegistrantDom = dom_import_simplexml($nodeRegistrant);
//we try to use simpleXML to create the node that we want to add after our target.
$nsNode = new SimpleXMLElement('<domain:ns>');
//grabs the node and all his children (none in this case), by importing the node we want to add,
//into the root object element that contains the <domain:registrant> node.
$nsNodeDom = $nodeRegistrantDom->ownerDocument->importNode(dom_import_simplexml($nsNode), true);
$nodeRegistrantDom->parentNode->insertBefore($nsNodeDom, $nodeRegistrantDom->nextSibling);
$simpleXmlNsNode = simplexml_import_dom($nsNodeDom);
Теперь у нас есть наш узел, расположенный на нужном месте. и преобразованы в SimpleXML так, теперь мы можем легко добавить несколько детей и заполнить оставшуюся часть файла XML ..
$hostAttr = $simpleXmlNsNode->addChild('domain:hostAttr');
$hostName = $hostAttr->addChild('domain:hostName');
Пожалуйста совет, MEM
Вы можете разместить небольшой автономный пример показывает вашу проблему? По крайней мере, я немного смущен тем, что происходит где и почему. Например. '$ NodeRegistrant'? Откуда это происходит? – VolkerK
Конечно. Немедленно. Было довольно сложно отрезать часть ее, чтобы поставить ее в качестве вопроса.Я добавлю дополнительную информацию. 5 мин. – MEM