tôi sử dụng mã perl này để đọc XML từ một tập tin, và sau đó ghi vào tập tin khác (kịch bản đầy đủ của tôi có mã để thêm thuộc tính):đọc XML từ và nộp trong khi vẫn giữ định dạng
#!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);
tuy nhiên điều này không lưu giữ các ký tự như ngắt dòng. Ví dụ, XML này:
<?xml version="1.0" encoding="utf-8"?>
<Test>
<Notification Content="test1 testx 
test2
test3
" Type="Test1234">
</Notification>
</Test>
trở này:
<?xml version="1.0" encoding="utf-8"?>
<Test>
<Notification Content="test1 testx
test2
test3
" Type="Test1234">
</Notification>
</Test>
tôi nghi ngờ tôi không viết để nộp đúng cách.
Khi tôi nghĩ rằng "bảo quản ngắt dòng", đây không phải là tất cả những gì bạn nghĩ đến. Ở đây bạn đang tìm cách bảo toàn * mã hóa * trùng hợp ngẫu nhiên cho các ký tự CR/LF. – tjd
Dường như XML :: DOM đặt trình xử lý mặc định để mở rộng mọi thứ (xem các dòng DOM.pm 2054-58). Bạn đã thử thách với điều đó để có được hành vi noexpand bạn muốn? – mghicks
phần đó của XML :: DOM dường như không hoạt động đúng - nhờ đề xuất mặc dù – Warpin