xml - 使用 XML::LibXML::XPathContext 通过 Perl 解析 XML

标签 xml perl xpath

我有一个 perl 子例程,旨在接收基本 xml 文档并使用 xpath 表达式从文档中收集特定信息。在这里

    sub parseXml {
    my ($rawXml) = @_;
    print "Raw XML resonse:\n" . $rawXml . "\n";

    # Set up the XPath search.
    my $xp = XML::LibXML::XPathContext->new;
    my $node = $xp->getContextNode;
    $xp->setContextNode($node);

    # Extract a list apiece of ids, whos, and whats.
    my @ids = $xp->findnodes('//object/void[@property="id"]/int');
    my @whos = $xp->findnodes('//object/void[@property="who"]/string');
    my @whats = $xp->findnodes('//object/void[@property="what"]/string');

    # Iterate over the arrays to print the data.
    my $it = each_array(@ids, @whos, @whats);
    while (my ($id, $who, $what) = $it->()) {
    print sprintf("%2d: ", $id->string_value) . 
        $who->string_value . " -> '" . 
        $what->string_value . "'\n";
    }
}

问题是,当我运行脚本时,我收到一条错误消息:

XPathContext:在...第 83 行丢失当前节点

我做错了什么?我对 Perl 非常陌生。

最佳答案

您在任何时候都不会解析输入 XML。鉴于 $rawXml 是一个字符串,请确保使用

my $dom = XML::LibXML->load_xml(string => $rawXml);
my $xp = XML::LibXML::XPathContext->new($dom);

我的猜测是第 83 行是 my $node = $xp->getContextNode;,该行失败,因为文档当前为空。无论如何,您不应该需要它以及以下行。

关于xml - 使用 XML::LibXML::XPathContext 通过 Perl 解析 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22760277/

相关文章:

java - JAXB 接受重复标签

c# - 使用 LINQ 干净地处理嵌套 XML 的更好方法

perl - 将类子例程作为回调传递

xpath - 使用 XMLSearch 在 XML 元素中搜索的方式正确还是错误?

css - xslt 中的样式标签未呈现

php - 将 PHP 对象转换为 XML 的类

perl - 在perl中声明全局变量

perl - 阅读文本的好方法是什么?

python - 在 Python 中使用 Selenium 单击并查看更多页面

java - 如何使用水平滚动条(通过 xpath) - Selenium/Java