I have to repeat what the previous node already said, DO NOT TREAT XML FILES AS TEXT. Use a library that actually understands the format.
In this case one of the options is XML::Rules in the filtering mode. You would read the CSV into a hash and then process the XML file with something like
use XML::Rules;
my $filter = XML::Rules->new(style => 'filter', rules => {
'XREF' => sub {
return $references{$_[1]->{_content}} ?? "Unknown reference $_[1]-
+>{_content}";
}
});
$filter->filterfile($source_path, $result_path);
If you do not want to process all <XREF> tags, but only those within <LinkValue> you can change the code to something like this:
my $filter = XML::Rules->new(style => 'filter', rules => {
'XREF' => {
qr{/LinkValue$} => sub {
return $references{$_[1]->{_content}} ?? "Unknown reference $_[
+1]->{_content}";
}
# or
# qr{/Property/LinkValue$} => sub {
# return $references{$_[1]->{_content}} ?? "Unknown reference $_[
+1]->{_content}";
# }
# for only <Property><LinkValue><XREF>
}
});
Jenda
Enoch was right!
Enjoy the last years of Rome.