【发布时间】:2021-10-18 10:33:36
【问题描述】:
我有以下格式的 XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<outer_tag>
<inner_tag name="Name_0" template="Template_0">
<string name="Name_1"><default>DEFAULT_NAME</default></string>
<string name="Name_2"><default /></string>
<string name="Name_3"><default></default></string>
</inner_tag>
</outer_tag>
我需要修改内容为 "DEFAULT_NAME" 的元素,并且它的父标签属性需要是 "Name_1"。
所以,输出将是这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<outer_tag>
<inner_tag name="Name_0" template="Template_0">
<string name="Name_1"><default>**NEW_NAME**</default></string>
<string name="Name_2"><default /></string>
<string name="Name_3"><default></default></string>
</inner_tag>
</outer_tag>
我尝试了以下代码:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
my $xml_file = 'xml1.xml';
my $xml = XMLin(
$xml_file,
KeepRoot => 1,
ForceArray => 1,
);
$xml->{outer_tag}->[0]->{string}->[0]->{default} = 'New_Name';
XMLout(
$xml,
KeepRoot => 1,
NoAttr => 1,
OutputFile => $xml_file,
);
但它在末尾添加了 New_Name1,而不是修改我需要替换的那个。我是 Perl 中的 XML 新手。
【问题讨论】:
-
你试过什么?你有什么问题?请向我们展示您的代码。 (提示:最好的解决方案几乎肯定不使用 XML::Simple。)
-
完全不相关,但可以节省一些输入:
->是 optional between bracket subscripts,所以你可以改用它:$xml->{outer_tag}[0]{string}[0]{default} = 'New_Name'