使用 perl 和 Mojo::DOM 替换 XML 节点

Replacing XML nodes using perl and Mojo::DOM

我想使用 Mojo::DOM 交换 XML 文件中的节点。 我很确定这是可能的,但我还没有找到办法。

鉴于以下 XML:

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

我想删除 div 并插入一个正文标签,这样结果如下所示:

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

我考虑过替换,但我没有找到替换为被替换标签的$dom的示例。

很简单,只要找到<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>