Perl 使用XML::LibXML向元素添加新类

Perl 使用XML::LibXML向元素添加新类,perl,xml-libxml,Perl,Xml Libxml,我有一个简单的HTML代码段,如下所示: 这是一段另一个 我需要向外部p元素添加一个新类b,从而产生以下预期结果: 这是一个段落另一个 内部p元素应保持不变 这可能吗?找到正确的元素并使用方法更改其属性 下面的代码使用注释中澄清的要求:感兴趣的段落是div下面的第一个段落,如果存在,则需要添加或创建其属性class use warnings; use strict; use feature 'say'; use XML::LibXML; my $xml = q(<div class="

我有一个简单的HTML代码段,如下所示:

这是一段

另一个

我需要向外部
p
元素添加一个新类
b
,从而产生以下预期结果:

这是一个段落

另一个

内部
p
元素应保持不变

这可能吗?

找到正确的元素并使用方法更改其属性

下面的代码使用注释中澄清的要求:感兴趣的段落是
div
下面的第一个段落,如果存在,则需要添加或创建其属性
class

use warnings;
use strict;
use feature 'say';

use XML::LibXML;

my $xml = q(<div class="out"><p class="a">This is a paragraph. )
        . q(<p class="b">another</p></p></div>);  #/

my $doc = XML::LibXML->load_xml(string => $xml);

my @nodes = $doc->findnodes('//p');

for my $node (@nodes) { 
    if ($node->parentNode->nodeName eq 'div') {
        my $attr_val = $node->getAttribute('class');
        $node->setAttribute(
            class => ($attr_val ? "$attr_val " : '') . 'b'
        );
    }   
}

say $doc;
然后将其附加到
属性,或以与上面相同的方式创建它

上面的照片


这是一个段落

另一个

找到正确的元素并使用方法更改其属性

下面的代码使用注释中澄清的要求:感兴趣的段落是
div
下面的第一个段落,如果存在,则需要添加或创建其属性
class

use warnings;
use strict;
use feature 'say';

use XML::LibXML;

my $xml = q(<div class="out"><p class="a">This is a paragraph. )
        . q(<p class="b">another</p></p></div>);  #/

my $doc = XML::LibXML->load_xml(string => $xml);

my @nodes = $doc->findnodes('//p');

for my $node (@nodes) { 
    if ($node->parentNode->nodeName eq 'div') {
        my $attr_val = $node->getAttribute('class');
        $node->setAttribute(
            class => ($attr_val ? "$attr_val " : '') . 'b'
        );
    }   
}

say $doc;
然后将其附加到
属性,或以与上面相同的方式创建它

上面的照片


这是一个段落

另一个

(1)“外部
p
元素”是指
div
正下方的元素吗?(2)“添加新类”是指在
class
属性存在时添加到它所具有的任何属性。还是…?(1)是。(2)如果
class
属性不存在,则添加该属性;否则,将新的class
b
附加到现有的
class
属性中。(1)“外部
p
元素”是否表示
div
正下方的元素?(2)“添加新类”是否表示如果
class
属性存在,则将其添加到所有属性中。或者…?(1)是的。(2) 添加
class
属性(如果该属性尚不存在);否则,将新类
b
附加到现有的
class
属性。