Thread XML-Parser (15 answers)
Opened by Henri at 2015-04-01 00:25

Gast Henri
 2015-04-01 00:25
#180485 #180485
Hallo Leute,
ich möchte hier ein XML-parser in Perl implementiert. meine XML-file sieht so aus:
mit der folgenden XML-Name: Compute_sys.xml in computer gespeichert

Code (xml): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
      <Profile origin="get" version="2.1" date="2013.05.20">
                         <Catalog id="sys" version="2.1">
                          <Parameter name="prim" value="2"/>
                           <Parameter name="second" value="3"/>
                           <Parameter name="copy" value="4"/>
                           <Parameter name="force" value="1"/>
                           <Parameter name="always" value="0"/>
                          <Parameter name="type" value="5" Type="False"/>
                          <Parameter name="memory" value="allow"/>
                         </Catalog>
                        </profile>


ich möchte dass bei der Ausgabe meines Perl-Codes ein Teil der XML-Name
und zwar "Compute" dans alle name und value meine XML-File.Habe ich mir etwas (unter) geschrieben. leider klappt es nicht, konnte jemand hier mir helfen?

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
my $parser = XML::Simple->new( KeepRoot => 1 );

# Création du fichier résultat
my $FichierResulat = 'resultat.txt';
open( my $FhResultat, '>', $FichierResulat )
  or die("Impossible d'ouvrir le fichier $FichierResulat\n$!");
my $doc = $parser->XMLin('compute_sys.xml');

# Tout le fichier XML est dans $doc sous forme d'arbre
foreach my $Catalog (@{ $doc -> {Catalog}->{name}}){
  print {$FhResultat} "";
  print {$FhResultat} str_if ($Catalog->{name});
  print {$FhResultat} "";
  print {$FhResultat} str_if ($Catalog->{value});

}
close($FhResultat);

sub is_array {
        my ($var) = @_;
        return ( ref($var) eq 'ARRAY' );
}

sub str_if {
        my ( $str, $default ) = @_;
        return $default unless $str;
        return $str;
}


modedit Editiert von pq: code-tags hinzugefügt
Last edited: 2015-04-01 00:32:58 +0200 (CEST)

View full thread XML-Parser