2012-04-12 28 views
5

Tôi đang sử dụng mã dưới đây để nhận được giá trị của nút từ một tập tin XML:Nhận giá trị nút sử dụng mô-đun XML :: XPath trong 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"; 
} 

Nội dung của 'test1.xml' như sau:

<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> 

tôi muốn in giá trị của tname (tức _sys_ident). Nhưng mã trên không in bất cứ thứ gì.

Nếu tôi sử dụng bên trong vòng lặp for sau:

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

sau đó, nó mang lại cho sau đầu ra:

<tname>_sys_ident_asp</tname> 

Tôi không muốn tên này nút hoàn chỉnh và chuỗi giá trị. Tôi chỉ muốn giá trị nút. Đây là lần đầu tiên tôi thử XML và XPath. Xin vui lòng cho tôi biết những gì tôi đang làm sai.

Trả lời

7

getNodeValue là dành cho attribute nút. Đối với elements, bạn muốn string_value phương pháp:

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

Cảm ơn. Câu trả lời hoàn hảo. – AnonGeek

+0

'$ nodeset-> get_nodelist' làm gì? – alex

+0

@alex, [đọc tài liệu] (https://metacpan.org/pod/XML::XPath::NodeSet#get_nodelist()) – cjm

1

cho xpath của bạn, hãy thử/file1/table/tname/text()

+0

Thực hiện việc này, bạn được nhắc nhập 'chức năng' .. (nhập vào bất kỳ thứ gì ở đây làm cho lệnh xpath thực thi thay vào đó và bạn phải khởi động lại phiên bash của bạn để nhận lệnh xpath 'thực') –

Các vấn đề liên quan