Ho alcuni file XML in cui desidero utilizzare alcune informazioni da essi. Ho scritto un codice che legge quei file e poi cerca alcune condizioni.Estrazione di dati da un documento XML che utilizza gli spazi dei nomi
Il problema è che questi file XML inizia con
<SquishReport version="2.1" xmlns="http://www.froglogic.com/XML2">
e Perl non li poteva leggere (almeno nel mio codice!). Ma quando sono aggiungendo queste righe nella prima riga del file di XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"?>
funziona molto bene.
Alcune linee dal mio file XML test.xml
:
<SquishReport version="2.1" xmlns="http://www.froglogic.com/XML2">
<test name="TEST">
<prolog time="2015-10-01T03:45:22+02:00"/>
<test name="tst_start_app">
<prolog time="2015-02-01T03:45:23+02:00"/>
<message line="38" type="LOG" file="C:\squish\test\sources.py" time="2015-02-01T03:45:23+02:00">
<description>
<![CDATA[>> >> >> start: init (global) - testcase C:\squish\test\tst_start_app]]></description>
</message>
</test>
</test>
</SquishReport>
e il codice Perl per la lettura del file XML è:
use strict;
use warnings;
use feature 'say';
use XML::LibXML;
# Parse the XML
my $xml = XML::LibXML->load_xml(location => 'test.xml');
# Iterate the entries
for my $entry ($xml->findnodes('/SquishReport/test/test')) {
my $key = $entry->findvalue('@name');
say "$key";
}
Eventuali duplicati di [Perchè X ML :: LibXML non trova nodi per questa query xpath quando si utilizza un namespace] (http: // stackoverflow.it/questions/4083550/why-does-xmllibxml-find-no-nodes-per-this-xpath-query-when-using-a-namespace) – nwellnhof
Si prega di non chiudere come duplicato di quella domanda. L'XML di quella domanda è illegale, complicando il problema e rendendo irrilevante la soluzione a questa domanda. Mi piacerebbe avere questa domanda disponibile come un esempio pulito. – ikegami