Iteración sobre nodos usando XML:: LibXML
perl xml-parsing (1)
Estoy usando XML :: LibXML (Ver: 1.70).
Mi archivo de entrada xml se ve así:
<?xml version="1.0" encoding="UTF-8"?>
<Equipment xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Equipments>
<ECID logicalName="SysNameAlpha" id="0"/>
<ECID logicalName="SysNameBeta" id="1"/>
</Equipments>
</Equipment>
y mi script de Perl:
my $file = ''data.xml'';
my $parser = XML::LibXML->new();
my $tree = $parser->parse_file($file);
my $root = $tree->getDocumentElement;
foreach my $camelid ($root->findnodes(''Equipments'')) {
my $name = $camelid->findvalue(''ECID/@logicalName'');
my $id = $camelid->findvalue(''ECID/@id'');
print $name;
print " = ";
print $id;
print ";/n";
}
El resultado que obtengo es:
SysNameAlphaSysNameBeta = 01;
Pero quiero una salida como esta:
SysNameAlpha = 0;
SysNameBeta = 1;
¿Cómo puedo conseguir esto?
Solo hay un nodo de Equipments
, por lo tanto, solo obtiene un $camelid
para escanear. Para remediarlo, puede cambiar las cosas ligeramente, por ejemplo, para iterar sobre Equipo / ECID:
foreach my $camelid ( $root->findnodes(''Equipments/ECID'') ) {
my $name = $camelid->findvalue(''@logicalName'');
my $id = $camelid->findvalue(''@id'');
...
}