我试图根据节点属性名称值编辑现有的XML文件。
例如:
<books>
<book name = 'Pride and Prejudice' value='not available' price='10'/>
<book name = 'To kill a Mockingbird' value='available' price='8'/>
<book name = 'The Face of a Stranger' value='not available' price='16'/>
</books>
目标是如果name属性值匹配,则更改value属性。例如,如果名称&#34; Pride and Prejudice&#34;匹配搜索,然后将值属性更改为“可用”。
输出应如下所示:
<books>
<book name = 'Pride and Prejudice' value='available' price='10'/>
<book name = 'To kill a Mockingbird' value='available' price='8'/>
<book name = 'The Face of a Stranger' value='not available' price='16'/>
</books>
我能够读取XML文件并匹配名称值,但无法弄清楚如何更改属性值。
这是我的代码:
my $xml_data = XML::LibXML->load_xml(location => a.xml);
for my $nodes ( $xml_data->findnodes('/Books/Book') ) {
my $att_name = $nodes->findvalue('@name');
my $att_val = $nodes->findvalue('@value');
if ( $searchString eq $att_name ) {
<how do I change the attribute value?>
}
}
答案 0 :(得分:2)
这应该按照你的意愿行事。请注意,我目前无法测试任何内容
您的XPath表达式/Books/Book
可能需要修复,因为您显示的XML数据包含元素<books>
和<book>
,我无法知道哪个是正确的
for my $book ( $xml_data->findnodes('/Books/Book') ) {
next unless $book->getAttribute('name') eq $searchString;
$book->setAttribute('value', 'available');
}