Wie man einen Knotenwert von XML erhalten, basierend auf einem anderen Knoten Wert perl mit
Ich habe meine projects.xml
Datei wie folgt:
<projects>
<project>
<id>ID_ABCD1</id>
<name>ptest1</name>
</project>
<project>
<id>IDB_abcd</id>
<name>ptest1</name>
<branch>bnm1</branch>
<branched_from_id>ID_ABCD1</branched_from_id>
<branched_from_version>111</branched_from_version>
</project>
<project>
<id>ID_ABCD2</id>
<name>ptest2</name>
</project>
<project>
<id>IDB_abcd2</id>
<name>ptest2</name>
<branch>bnm2</branch>
<branched_from_id>ID_ABCD2</branched_from_id>
<branched_from_version>111</branched_from_version>
</project>
</projects>
In meinem vorhandenen Code, den ich Namen bin immer Projekt auf Projekt-ID aus einer anderen Datei categories.xml
erhalten.
Für jede dieser Projektnamen ich suchen muß, ist es ein branch
Element für sie, und wenn das Element Ich habe existiert dann die entsprechenden branch
Namen und branched_from_version
zu bekommen.
branched_from_id
Wert ist die ID eines anderen Projekts.
#!/usr/bin/env perl
use strict;
use XML::LibXML;
use File::Basename;
use File::Find::Rule;
use XML::Twig;
my $cat_xml = '/home/Ras/categories.xml';
my $twig = XML::Twig->parse($cat_xml);
my $doc = XML::LibXML->new->parse_file($cat_xml);
my $proj_xml = '/home/Ras/projects.xml';
my $twigp = XML::LibXML->new->parse_file($proj_xml);
my @nodes = $doc->findnodes('/categories/category');
my $catname = "/home/Ras/category.txt";
open FH, "> $catname" or warn "not able to open catname file";
foreach my $catnode (@nodes) {
my @catn = $catnode->findvalue('@name');
print FH "@catn \n";
}
my @catlist = `cat /home/Ras/category.txt`;
foreach my $cat (@catlist) {
chomp($cat);
$cat =~ s/^\s+|\s$//g;
my $path = "./category[\@name=\"$cat\"]/project";
foreach my $project ($twig->findnodes("$path")) {
my $projout = $project->text;
foreach my $projname ($twigp->findvalue("/projects/project[id = '$projout']/name")) {
}
}
}
In obigem Code $projout
enthalten den ID-Wert meiner project.xml
Datei. Aber diese ID-Wert mit branch
Knoten sind nicht da.
Ich habe Name Wert in $projname
. Also, basierend auf dem Namen Wert in $projname
muss ich den entsprechenden branch
Wert und branched_from_version
Wert erhalten.
Warum mischen Sie 'XML :: Twig' und' XML :: LibXML'? Das sieht nach einem Weg zum Schmerz aus. – Sobrique
Können Sie klären, was die erwarteten Ein- und Ausgänge sind? Vielleicht können wir mit der gewünschten Leistung laufen? – Sobrique
Das ist ein bisschen Chaos. Sie erstellen eine Liste von 'category' Namen aus' categories.xml' und schreiben sie auf den Datenträger; dann liest du es zurück und suchst die gleiche xml-datei nach diesen 'category'-elementen! Sie müssen auch 'categories.xml' anzeigen, wenn Sie Hilfe benötigen. – Borodin