Ich habe ein seltsames Problem, das ich nicht umgehen kann. Kannst du bitte sehen, was ich falsch mache? Ich versuche, XML in Perl mit XML :: LibXML zu erstellen. Alles funktioniert gut, bis ich anfange, Subroutine zu bauen und Argumente zu übergeben.Wie Parameter in Perl übergeben werden, ohne dass Daten verändert werden
Zuerst Der Code, der
my $root = $doc->createElement("XML_FILE");
my @sortedOuterTags = qw (JMS_VERSION
FILE_NAME
SUBMIT_BY
SUBMIT_DATE
);
# Use hash slice to access the list in hash elements
# Remember has elements are accessed randomly, hence hash slice-ing
my %outHashTags;
@outHashTags { @sortedOuterTags } = ('data1',
'data2',
'data3',
'data3');
for my $name (@sortedOuterTags) {
my $outTag = $doc->createElement($name);
my $outValue = $outHashTags{$name};
$outTag->appendTextNode($outValue);
$root->appendChild($outTag);
}
arbeitet Baut Ausgabe:
<JMS_VERSION>data1</JMS_VERSION>
<FILE_NAME>data2</FILE_NAME>
<SUBMIT_BY>data3</SUBMIT_BY>
<SUBMIT_DATE>data4</SUBMIT_DATE>
Jetzt ist der Fehler:
Sobald ich unten I for-Schleife zu einer Unterroutine, wie Show ausgliedern Fehler bekommen. Ich überlasse 3 Parameter. 1) nicht Array-Werte von storedReportTag 2) nicht% reportHashTag Daten 3) $ Bericht Element erhalten ist leer
-Code erhalten:
buildXMLElements(\@sortedReportTag, %reportHashTags, $report);
sub buildXMLElements() {
my(@elementTags, %hashTags, $parentElement) = @_;
for my $name (@elementTags) {
my $reportTag = $doc->createElement($name);
my $reportValue = $hashTags{$name};
$reportTag->appendTextNode($reportValue);
$parentElement->appendChild($reportTag);
}
}
Ich möchte setzen in Unter wie ich habe mehrere Tags, um den Code wiederzuverwenden. Ich habe versucht, Parameter übergeben sowohl direkt als auch als Referenz .......
Danke
Update:
Nach der Bearbeitung meiner Sub es sieht nun wie folgt aus:
buildXMLElements(\@sortedReportTag, \%reportHashTags, $report);
sub buildXMLElements() {
my($elementTags, $hashTags, $parentElement) = @_;
for my $name (@$elementTags) {
my $reportTag = $doc->createElement($name);
my $reportValue = $hashTags->[$name];
$reportTag->appendTextNode($reportValue);
$parentElement->appendChild($reportTag);
}
}
es der Linie stirbt an:
my $reportValue = $hashTags->[$name];
Schluss Update:
Jims HilfeMit korrigierte ich den Code: Hier endgültige Version, die
buildXMLElements(\@sortedReportTag, \%reportHashTags, $report);
sub buildXMLElements() {
my($elementTags, $hashTags, $parentElement) = @_;
for my $name (@$elementTags) {
my $reportTag = $doc->createElement($name);
my $reportValue = $hashTags->{$name};
$reportTag->appendTextNode($reportValue);
$parentElement->appendChild($reportTag);
}
}
http://stackoverflow.com/questions/29354417 – mob
http://stackoverflow.com/questions/1161043 – mob