我有以下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
之类的东西,有什么帮助吗?
答案 0 :(得分:5)
my %attributes = map { $_->name => $_->value } $node->attributes();
答案 1 :(得分:2)
您的XPATH查询似乎错了 - 您正在搜索'/WSApiResponse/Function/something'
,而您的XML的根节点是Response
而不是WSApiResponse
来自XML::LibXML::Node
的文档(findnodes()
预期返回的内容),您应该寻找my $attrs = $nodes[0]->attributes()
而不是$nodes[0]->getAttributes
答案 2 :(得分:0)
我将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}