gpt4 book ai didi

perl - 为什么 XML::LibXML 将一个 child 添加到一个 而不是另一个?

转载 作者:行者123 更新时间:2023-12-04 17:03:53 24 4
gpt4 key购买 nike

我在 XML::LibXML 上看到了一些奇怪的行为.
下面的代码旨在添加 <year>2005</year>两者 <book>节点。这里有什么问题吗?我试过更改 XPath 查询( //library/book ),但结果是一样的。

use strict;
use warnings;
use XML::LibXML;

my $xml = XML::LibXML->new->parse_string( << 'MAIN' );
<library>
<book>
<title>Perl Best Practices</title>
<author>Damian Conway</author>
<isbn>0596001738</isbn>
<pages>542</pages>
<image src="http://www.oreilly.com/catalog/covers/perlbp.s.gif"
width="145" height="190" />
</book>
<book>
<title>Perl Cookbook, Second Edition</title>
<author>Tom Christiansen</author>
<author>Nathan Torkington</author>
<isbn>0596003137</isbn>
<pages>964</pages>
<image src="http://www.oreilly.com/catalog/covers/perlckbk2.s.gif"
width="145" height="190" />
</book>
</library>
MAIN

my ( $age ) = XML::LibXML->new
->parse_string( '<year>2005</year>' )
->findnodes( './year' );

my @books = $xml->findnodes( '//book' );

$_->addChild( $age ) for @books;

print $xml->toString;

输出
<?xml version="1.0"?>
<library>
<book>
<title>Perl Best Practices</title>
<author>Damian Conway</author>
<isbn>0596001738</isbn>
<pages>542</pages>
<image src="http://www.oreilly.com/catalog/covers/perlbp.s.gif" width="145" height="190"/>
</book>
<book>
<title>Perl Cookbook, Second Edition</title>
<author>Tom Christiansen</author>
<author>Nathan Torkington</author>
<isbn>0596003137</isbn>
<pages>964</pages>
<image src="http://www.oreilly.com/catalog/covers/perlckbk2.s.gif" width="145" height="190"/>
<year>2005</year></book>
</library>

最佳答案

添加节点会在该节点与要添加到的节点之间创建父子关系。

一个节点不能有两个父节点,因此当您将年份节点添加到第二本书时,它会从第一本书中删除。您需要为每本书创建一个节点。

for my $book ($xml->findnodes('//book')) {
my $year = XML::LibXML::Element->new('year');
$year->appendTextNode('2005');
$book->addChild($year);
}

或者
my $year = XML::LibXML::Element->new('year');
$year->appendTextNode('2005');

for my $book ($xml->findnodes('//book')) {
$book->addChild( $year->cloneNode(1) );
}

关于perl - 为什么 XML::LibXML 将一个 child 添加到一个 <book> 而不是另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7207828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com