xml - 如何在 Perl 中使用 XML::LibXML 访问节点

标签 xml perl parsing cpan

我有一个类似于 this 的 XML 数据:

我想做的就是简单地提取 出版年份采用以下结构:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<pre> 
    <PubmedArticle>
        <MedlineCitation Owner="NLM" Status="In-Data-Review">
            <PMID Version="1">23853691</PMID>
            <DateCreated>
                <Year>2013</Year>
                <Month>07</Month>
                <Day>15</Day>
            </DateCreated>
            <Article PubModel="Electronic-Print">
                <Journal>
                    <ISSN IssnType="Electronic">1932-6203</ISSN>
                    <JournalIssue CitedMedium="Internet">
                        <Volume>8</Volume>
                        <Issue>5</Issue>
                        <PubDate>
                            <Year>2013</Year>
                        </PubDate>
...
</pre>

但是为什么我的以下 Perl 代码无法访问年份“2013”​​?

use strict;
use Data::Dumper;
use XML::LibXML 1.70;
my $parser = XML::LibXML->new();

my $xmlfilename = "myfile.xml"; 
# obtained from http://dpaste.com/1307466/plain/

my $doc = $parser->parse_file( $xmlfilename );

foreach my $art ( $doc->findnodes('/PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate') ) {
        my ($year) = $art->findnodes('./Year');
        print Dumper $year->to_literal ;

 }

正确的做法是什么?

最佳答案

您忘记了 pre 根元素。

改变

/PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate

/pre/PubmedArticle/MedlineCitation/Article/Journal/JournalIssue/PubDate

关于xml - 如何在 Perl 中使用 XML::LibXML 访问节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17694125/

相关文章:

perl - 如何在 Win32 上使用 Perl 将数据发送到网络打印机?

parsing - 字符串语言的递归语法

javascript - 声明 json 的性能 - JSON.parse 与对象文字

Java DOM xml 不能得到 child

Java 更改和移动非标准的 XML 文件

从 PDF 中读取附加的 XML

android - JSONArray 无法转换为 JSONObject 错误

xml - Perl XML::DOM 在文件之间复制节点树

Perl for 循环失控

mysql - 如何使用 DBD::mysql 和 Perl 检查数据库行是否存在?