我有一個下面格式的XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"? >
<outer_tag>/span>
< inner_tag name="Name_0" template="Template_0">
<string name="Name_1">/span>< default>DEFAULT_NAME</default></string>
<string name="Name_2"/span>> <default /></string>/span>
<string name="Name_3"> < default></default></string>
</inner_tag>
</outer_tag>/span>
我需要修改內容為 "DEFAULT_NAME "的元素,同時,它的父標簽屬性需要為 "Name_1"。
所以,輸出將是這樣的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"? >
<outer_tag>/span>
< inner_tag name="Name_0" template="Template_0">
<string name="Name_1">/span>< default>**NEW_NAME**</default></string>
<string name="Name_2"/span>> <default /></string>/span>
<string name="Name_3"> < default></default></string>
</inner_tag>
</outer_tag>/span>
我試了一下下面的代碼:
我試了一下下面的代碼。
#!/usr/bin/perl
use strict;
使用警告。
use XML::Simple;
my $xml_file = 'xml1.xml'/span>;
my $xml = XMLin(
$xml_file,
KeepRoot => 1,
ForceArray => 1,
);
$xml->{outer_tag}->[0]->{string}->[0]->{default}='New_Name'/span>。
XMLout(
$xml。
KeepRoot =>/span> 1,
NoAttr => 1,
OutputFile => $xml_file,
);
但是它在最后添加了New_Name1,而不是修改我需要替換的那個。我是Perl中XML的新手。
uj5u.com熱心網友回復:
XML::Simple帶有以下警告:
請不要在新的代碼中使用這個模塊
。
因此,我建議使用另一個模塊(例如,XML::Twig或XML::LibXML)。如果你必須使用XML::Simple,請看我答案的結尾。
使用XML::Twig,你可以做到:
use XML::Twig;
my $xml_file = 'xml1.xml'。
my $twig = XML::Twig->new();
$twig->parsefile($xml_file)。
我的$node = ($twig->get_xpath('/outer_tag/inner_tag/string[@name="Name_1"]/default'/span>)) [0]。
$node->set_text('New_Name') 。
$twig->列印。
如果你想的話,你可以縮進輸出或列印到一個檔案中,見檔案。
。或者,使用XML::LibXML:
use XML::LibXML;
my $xml_file = 'xml1.xml'。
my $dom = XML::LibXML->load_xml(location => $xml_file) 。
我的$node=($dom-> findnodes('/outer_tag/inner_tag/string[@name="Name_1"]/default/text()')) [0]。
$node->setData('New_Name')。
print $dom-> toString
如果你堅持使用XML::Simple:
你目前使用XML::Simple的代碼不能作業的原因是你假設$xml的結構是什么,而你的假設是錯誤的。使用Data::Dumper或Data::Printer,你可以很容易地檢查你的結構包含什么,問題就變得很明顯了:
use Data::Printer。
my $xml_file = 'xml1.xml'/span>;
my $xml = XMLin(
$xml_file,
KeepRoot => 1,
ForceArray => 1,
);
p $xml。
這將輸出:
{
outer_tag [
[0] {
inner_tag {
Name_0 {
string {
Name_1 {
default [
[0] "DEFAULT_NAME"/span>
]
},
....
由此可見,你應該做的是
$xml->{outer_tag}->[0] ->{inner_tag}-> {Name_0}->{string}->{Name_1}->{default}='New_Name'。
代替
$xml->{outer_tag}-> [0]-> {string}->[0]->{default} = 'New_Name'。
這就是說,使用XML::Twig或XML::LibXML。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311385.html
標籤:
上一篇:為什么除法被決議為正則運算式?
