Perl 使用 XML Path Context 提取数据
Posted
技术标签:
【中文标题】Perl 使用 XML Path Context 提取数据【英文标题】:Perl using XML Path Context to extract out data 【发布时间】:2012-09-30 11:38:28 【问题描述】:我有以下xml
<?xml version="1.0" encoding="utf-8"?>
<Response>
<Function Name="GetSomethingById">
<something idSome="1" Code="1" Description="TEST01" LEFT="0" RIGHT="750" />
</Function>
</Response>
我想要<something>
节点的属性作为散列。我尝试如下
my $xpc = XML::LibXML::XPathContext->new(
XML::LibXML->new()->parse_string($xml) # $xml is containing the above xml
);
my @nodes = $xpc->findnodes('/Response/Function/something');
我期待有类似$nodes[0]->getAttributes
的东西,有什么帮助吗?
【问题讨论】:
【参考方案1】:my %attributes = map $_->name => $_->value $node->attributes();
【讨论】:
工作就像一个魅力:) thnx 很多。【参考方案2】:您的 XPATH 查询似乎有误 - 您正在搜索 '/WSApiResponse/Function/something'
而您的 XML 的根节点是 Response
而不是 WSApiResponse
从XML::LibXML::Node
的文档(findnodes()
预计会返回的那种东西),您应该寻找my $attrs = $nodes[0]->attributes()
而不是$nodes[0]->getAttributes
【讨论】:
啊.. 复制粘贴时打错字了...非常抱歉让您感到困惑。【参考方案3】:我使用XML::Simple
处理这类事情。所以如果XML文件是data.xml
use strict;
use XML::Simple();
use Data::Dumper();
my $xml = XML::Simple::XMLin( "data.xml" );
print Data::Dumper::Dumper($xml);
my $href = $xml->Function->something;
print Data::Dumper::Dumper($href);
注意:使用 XML::Simple,根标签映射到结果哈希本身。因此没有$xml->Response
【讨论】:
我也是。 XML::Simple 是要走的路。 为什么你认为只能有一个Function
? XML::Simple 是最复杂的 XML 模块。
感谢您的回复...不过,@ikegami 的解决方案正是我所需要的。以上是关于Perl 使用 XML Path Context 提取数据的主要内容,如果未能解决你的问题,请参考以下文章