来自以下文件XML::Simple:
不鼓励在新代码中使用此模块.其他模块可用,提供更直接和一致的接口.特别强烈建议使用XML :: LibXML.
该模块的主要问题是大量选项以及这些选项交互的任意方式 - 通常会产生意外结果.
有人可以为我澄清一下这主要原因是什么?
我使用这个perl代码从文件中读取XML,然后写入另一个文件(我的完整脚本有代码来添加属性):
#!usr/bin/perl -w
use strict;
use XML::DOM;
use XML::Simple;
my $num_args = $#ARGV + 1;
if ($num_args != 2) {
print "\nUsage: ModifyXML.pl inputXML outputXML\n";
exit;
}
my $inputPath = $ARGV[0];
my $outputPath = $ARGV[1];
open(inputXML, "$inputPath") || die "Cannot open $inputPath \n";
my $parser = XML::DOM::Parser->new();
my $data = $parser->parsefile($inputPath) || die "Error parsing XML File";
open my $fh, '>:utf8', "$outputPath" or die "Can't open $outputPath for writing: $!\n";
$data->printToFileHandle($fh);
close(inputXML);
Run Code Online (Sandbox Code Playgroud)
但是这不会保留像换行符这样的字符.例如,这个XML:
<?xml version="1.0" encoding="utf-8"?>
<Test>
<Notification Content="test1 testx …Run Code Online (Sandbox Code Playgroud) 我有一个可以登录并返回会话ID的脚本。我需要会话ID,以便可以填充XML文件来处理它,例如,为苗圃创建工厂房间。
#!/usr/bin/perl -w
use strict;
use LWP::UserAgent;
use Data::Dumper;
use XML::Simple;
my $authenticate = do {
open my $fh, '<', '/tmp/login.xml' or die "Could not open file: $!";
local $/;
<$fh>;
};
my $webpage = "https://www.example.com/api";
my $ua = LWP::UserAgent->new;
my $response = $ua->post($webpage, Content_Type => 'text/xml',
Content => $authenticate);
if ( $response->is_success) {
my $xml = new XML::Simple;
my $x = $response->decoded_content;
# read XML file
my $data = $xml->XMLin($x);
my $sessionid = $data->{'sessionid'};
...
Run Code Online (Sandbox Code Playgroud)
我需要使用该sessionid变量并将其插入另一个如下所示的xml文件中:
<xml>
<API>4.0</API>
<action>plant_room_add</action> …Run Code Online (Sandbox Code Playgroud)