PHP-элемент вставки XML после (или до) другого элемента

У меня есть ранее созданный XML:

<newsletter> <header> </magazine> </image> <strap/> </header> <intro> <date/> <text/> </edimg> </intro> <shop> <heading/> <article/> <title/> <img/> <link/> <excerpt/> </shop> <sidebar> <cover/> <cover_link/> <text/> <advert> <link/> <image/> </advert> </sidebar> </newsletter> 

Мне нужно иметь возможность вставить элемент между элементами <intro> и <shop>

это:

 $section = $dom->documentElement->appendChild($dom->createElement('section')); 

просто создаст элемент в <newsletter> .

Я предположил, что это будет довольно просто, но, похоже, не может найти решение.

Благодарю.

Вы можете попробовать это; Я не тестировал его, но решение исходит от использования insertBefore вместо appendChild.

 $shop = $dom->getElementsByTagName("shop")->item(0); $section = $dom->documentElement->insertBefore($dom->createElement('section'),$shop); 

Извлеките узел <shop> и используйте

  • DOMNode::insertBefore – добавляет новый дочерний элемент до ссылочного узла

вместо добавления к элементу documentElement .

Вы можете сделать это и из DOMDocument а также при прохождении в узле магазина в качестве второго аргумента. Лично мне легче просто сделать это из узла магазина, потому что вы все равно должны его получить:

 $shopNode->insertBefore($newNode); 

Пытаться

 $section = $dom->documentElement->insertBefore( $dom->createElement('section'), $shop) ); 

где $shop указывает на элемент <shop> .