Ich habe einige XML-Dateien, wo ich einige Informationen von ihnen verwenden möchte. Ich habe einen Code geschrieben, der diese Dateien liest und dann nach bestimmten Bedingungen sucht.Extrahieren von Daten aus einem XML-Dokument, das Namespaces verwendet
Das Problem ist, dass diese XML-Datei
<SquishReport version="2.1" xmlns="http://www.froglogic.com/XML2">
mit
beginnt und Perl kann sie nicht lesen (zumindest in meinem Code!). Aber wenn ich diese Zeilen Anfügen in der ersten Zeile der DateiXML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"?>
funktioniert sehr gut.
Einige Zeilen aus meiner XML-Datei 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>
und der Perl-Code die XML-Datei zum Lesen ist:
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";
}
Mögliche Duplikat [Warum funktioniert X ML :: LibXML findet keine Knoten für diese xpath-Abfrage, wenn ein Namespace verwendet wird] (http: // stackoverflow.com/questions/4083550/why-does-xmllibxml-find-no-nodes-für-diese-xpath-query-wenn-namespace verwendet) – nwellnhof
Bitte nicht als Duplikat dieser Frage schließen. Das XML dieser Frage ist illegal, verkompliziert das Problem und macht die Lösung dieser Frage für diese Frage irrelevant. Ich möchte diese Frage als ein sauberes Beispiel zur Verfügung stellen. – ikegami