2012-04-12 17 views
5

I m utilizzando il codice sottostante per ottenere il valore di nodo da un file XML:Ottenere valore del nodo utilizzando il modulo XML :: XPath in Perl

use XML::XPath; 
use XML::XPath::XMLParser; 

my $pt1 = XML::XPath->new(filename => 'test1.xml'); 

my $nodeset = $pt1->find('/file1/table/tname'); 

foreach my $node ($nodeset->get_nodelist) 
{ 
    print $node->getNodeValue."\n"; 
} 

Il contenuto di 'test1.xml' è come qui sotto:

<file1> 
    <table> 
     <tname>_sys_ident</tname> 
     <ttype>regular</ttype> 
     <col> 
      <name>_sys_ident_asp</name> 
      <type>varchar(16)</type> 
      <fkey>_sys_asp</fkey> 
      <attr>PRIMARY KEY</attr> 
     </col> 
    </table> 
</file1> 

voglio stampare il valore di TNAME (cioè _sys_ident). Ma il codice sopra non stampa nulla.

Se uso il seguente all'interno per ciclo:

print XML::XPath::XMLParser::as_string($node); 

poi, dà output seguente:

<tname>_sys_ident_asp</tname> 

Non voglio questo nome nodo completo e Valore stringa. Voglio solo il valore del nodo. Questa è la prima volta che cerco XML e XPath. Per favore dimmi cosa sto sbagliando.

risposta

7

getNodeValue è per i nodi attribute. Per elements, si desidera che il metodo di string_value:

foreach my $node ($nodeset->get_nodelist) 
{ 
    print $node->string_value."\n"; 
} 
+0

Grazie. Risposta perfetta – AnonGeek

+0

Cosa fa '$ nodeset-> get_nodelist'? – alex

+0

@alex, [leggi i documenti] (https://metacpan.org/pod/XML::XPath::NodeSet#get_nodelist()) – cjm

1

Per la vostra XPath, provare/file1/table/TNAME/text()

+0

In questo modo, viene richiesto di immettere una 'funzione' .. (immettendo qualcosa qui si esegue invece il comando xpath e si deve riavviare la sessione bash per ottenere il comando 'reale' xpath) –

Problemi correlati