У меня есть ранее созданный 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>
.