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