2017-10-23 2 views
0

Beispiel XML-DokumentXML :: Parsing - Unable Kind erkennen Knoten

<?xml version="1.0" encoding="UTF-8"?> 
<web-interface-classifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:noNamespaceSchemaLocation="WEB-INTERFACE-GROUP-CLASSIFIER.xsd" xmlns="parent/child1/granchild2/v1"> 
    <classifier> 
     <key1>somevalue</key1> 
    </classifier> 
    <classifier> 
     <key2>somevalue</key2> 
    </classifier> 
</web-interface-classifier> 

-Code XML-Dokument oben zu analysieren.

my $dom = XML::LibXML->load_xml(location => $filename);   
my $xpc = XML::LibXML::XPathContext->new(); 
$xpc->registerNs(xsi => "http://www.w3.org/2001/XMLSchema-instance"); 

foreach my $node ($xpc->findnodes("web-interface-classifier/classifier", $dom)) { 
    print Dumper($node); 
} 

Am versuchen, das XML-Dokument zu analysieren und die notwendigen Schlüssel-Wert-Paare aus dem ‚Sichter‘ Knoten-Dump, die erforderlichen untergeordneten Knoten werden nicht erkannt. Können Sie mir bitte ein paar Hinweise geben?

+0

PS - Sie sollten nicht relative URIs für Namespaces werden. – ikegami

Antwort

4

Sie versuchen, Elemente vom Typ web-interface-classifier und classifier vom parent/child1/granchild2/v1 Namensraum zu finden, aber man fragte Elemente vom Typ aus dem leeren Namensraum web-interface-classifier und classifier zu finden. Fixed:

#!/usr/bin/env perl 

use strict; 
use warnings; 
use v5.10; 

use Data::Dumper; 
use XML::LibXML; 
use XML::LibXML::XPathContext; 

my $dom = XML::LibXML->load_xml(IO => \*DATA); 

my $xpc = XML::LibXML::XPathContext->new(); 
$xpc->registerNs(u => "parent/child1/granchild2/v1"); 

for my $node ($xpc->findnodes("//u:web-interface-classifier/u:classifier", $dom)) { 
    say $node->toString(); 
} 

__DATA__ 
<?xml version="1.0" encoding="UTF-8"?> 
<web-interface-classifier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:noNamespaceSchemaLocation="WEB-INTERFACE-GROUP-CLASSIFIER.xsd" xmlns="parent/child1/granchild2/v1"> 
    <classifier> 
     <key1>somevalue</key1> 
    </classifier> 
    <classifier> 
     <key2>somevalue</key2> 
    </classifier> 
</web-interface-classifier> 

Ausgänge:

<classifier> 
     <key1>somevalue</key1> 
    </classifier> 
<classifier> 
     <key2>somevalue</key2> 
    </classifier>