我無法理解/使用Perl中的XML::LibXML包的名稱空間。我可以成功訪問元素,但不能訪問屬性。我有以下代碼訪問XML文件(http://pastebin.com/f3fb9d1d0)。如何在Perl中訪問XML :: LibXML中的屬性和元素?
my $tree = $parser->parse_file($file); # parses the file contents into the new libXML object.
my $xpc = XML::LibXML::XPathContext->new($tree);
$xpc->registerNs(microplateML => 'http://moleculardevices.com/microplateML');
然後我嘗試訪問一個名爲common-name的元素和一個名爲name的屬性。
foreach my $camelid ($xpc->findnodes('//microplateML:species')) {
my $latin_name = $camelid->findvalue('@name');
my $common_name = $camelid->findvalue('common-name');
print "$latin_name, $common_name" ;
}
但只有拉丁名(@name
)被打印出來,共名稱不是。我在做什麼錯了,我怎樣才能得到通用名稱來打印出來呢?
@name在這種情況下做了什麼?我認爲它是一個數組,並且該屬性應該放入一個數組中,因爲可以有多個屬性,但元素(如通用名稱)不應該是因爲應該只有一個?
我一直在這裏遵循的例子:http://www.xml.com/pub/a/2001/11/14/xml-libxml.html 這裏:http://perl-xml.sourceforge.net/faq/#namespaces_xpath,並試圖讓他們的榜樣駱駝劇本與我的命名空間的工作,因此怪異的命名空間。
感謝尼爾斯,我得到了我原來的問題走錯了路周圍,拉丁文名字(@name)打印出來很好,但通用名稱不是。不知道這是否會改變你的答案。我試過你的例子,但是我根本無法打印任何東西。我遇到的問題更多地與我想的命名空間有關。如果我不使用前兩個命名空間行(在它們中帶有$ xpc),並且只需引用elemtents,如http://www.xml.com/pub/a/2001/11/14/xml-libxml中的示例.html然後一切都很好,但是當我包含名稱空間時,它不起作用,但我不知道elementIwant – John 2010-01-12 07:30:51
我刪除了名稱空間並平衡了您所指的用於使示例運行的XML文件中的標記。我將添加命名空間到示例。 – 2010-01-12 15:30:47
我在pastebin上更新了您的XML文件http://pastebin.com/f3fb9d1d0 – 2010-01-12 18:13:36