Замена узлов XML с помощью perl и Mojo::DOM

Я хочу заменить узел в файле XML, используя Mojo::DOM. Я почти уверен, что это возможно, но я еще не нашел способа.

Учитывая следующий XML:

my $xml = q~
<html>
    <div>
        <p>1</p>
        <p>2</p>
        <img />
    </div>
</html>
~;

Я хотел бы удалить div и вместо этого вставить тег body, чтобы результат выглядел так:

my $xml = q~
<html>
    <body>
        <p>1</p>
        <p>2</p>
        <img />
    </body>
</html>
~;

Я думал о замене, но не нашел примера, где заменой является $dom замененного тега.


person capfan    schedule 03.06.2015    source источник


Ответы (1)


Очень просто найти элемент <div> и использовать метод tag для изменения его тега.

Эта программа демонстрирует. Селектор CSS html > div находит (первый) элемент <div>, который является дочерним элементом элемента <html>.

use strict;
use warnings;

use Mojo::DOM;

my $xml = q~
<html>
    <div>
        <p>1</p>
        <p>2</p>
        <img />
    </div>
</html>
~;

my $dom = Mojo::DOM->new($xml);

$dom->at('html > div')->tag('body');

print $dom, "\n";

вывод

    <html>
        <body>
            <p>1</p>
            <p>2</p>
            <img>
        </body>
    </html>
person Borodin    schedule 03.06.2015