xml perl xml-parsing libxml2 xml-libxml

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''); ... }