скажите, что у меня есть XML:
<root>
<nodeA />
<nodeA />
<nodeA />
<nodeC />
<nodeC />
<nodeC />
</root>
Как я вставляю "nodeB" между As и Cs? В PHP, предпочтительно через SimpleXML? Как:
<root>
<nodeA />
<nodeA />
<nodeA />
<nodeB />
<nodeC />
<nodeC />
<nodeC />
</root>
Ниже приводится функция для вставки нового SimpleXMLElement после некоторого другого SimpleXMLElement. Поскольку это невозможно напрямую с SimpleXML, он использует некоторые классы / методы DOM за кулисами для выполнения работы.
function simplexml_insert_after(SimpleXMLElement $insert, SimpleXMLElement $target)
{
$target_dom = dom_import_simplexml($target);
$insert_dom = $target_dom->ownerDocument->importNode(dom_import_simplexml($insert), true);
if ($target_dom->nextSibling) {
return $target_dom->parentNode->insertBefore($insert_dom, $target_dom->nextSibling);
} else {
return $target_dom->parentNode->appendChild($insert_dom);
}
}
И пример того, как это можно использовать (конкретно для вашего вопроса):
$sxe = new SimpleXMLElement('<root><nodeA/><nodeA/><nodeA/><nodeC/><nodeC/><nodeC/></root>');
// New element to be inserted
$insert = new SimpleXMLElement("<nodeB/>");
// Get the last nodeA element
$target = current($sxe->xpath('//nodeA[last()]'));
// Insert the new element after the last nodeA
simplexml_insert_after($insert, $target);
// Peek at the new XML
echo $sxe->asXML();
Если вы хотите / нуждаетесь в объяснении того, как это работает (код довольно простой, но может включать иностранные концепции ), Просто спроси.