PHP XML вставка элемента после (или до) другого элемента - PullRequest
4 голосов
/ 18 января 2011

У меня есть ранее сгенерированный 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> элементами

this:

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

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

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

Спасибо.

Ответы [ 3 ]

5 голосов
/ 18 января 2011

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

$shop = $dom->getElementsByTagName("shop")->item(0);
$section = $dom->documentElement->insertBefore($dom->createElement('section'),$shop);
0 голосов
/ 18 января 2011

Попробуйте

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

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

0 голосов
/ 18 января 2011

Получить узел <shop> и использовать

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

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

$shopNode->insertBefore($newNode);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...