Mam niektóre pliki XML, w których chcę użyć niektórych informacji. Napisałem kod, który odczytuje te pliki, a następnie szuka pewnych warunków.Wyodrębnianie danych z dokumentu XML korzystającego z przestrzeni nazw
Problemem jest to, że plik XML rozpoczyna
<SquishReport version="2.1" xmlns="http://www.froglogic.com/XML2">
i Perl nie mógł ich odczytać (przynajmniej w moim kodu!). Ale kiedy jestem dołączanie te linie w pierwszej linii XML
pliku
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl"?>
działa bardzo dobrze.
Niektóre linie z moim pliku 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>
oraz kod Perl do odczytu pliku 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";
}
Możliwy duplikat [Dlaczego X ML :: LibXML nie znajduje węzłów dla tej kwerendy xpath przy użyciu przestrzeni nazw] (http: // stackoverflow.com/questions/4083550/why-does-xmllibxml-find-no-nodes-for-this-xpath-query-when-using-a-namespace) – nwellnhof
Proszę nie zamykać jako duplikat tego pytania. XML tego pytania jest nielegalne, co komplikuje sprawę i sprawia, że rozwiązanie tego pytania jest nieistotne dla tego pytania. Chciałbym, aby to pytanie było dostępne jako czysty przykład. – ikegami