3

我有以下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,有什么帮助吗?

4

3 回答 3

5
my %attributes = map { $_->name => $_->value } $node->attributes();
于 2012-10-10T05:09:48.527 回答
2

您的 XPATH 查询似乎是错误的 - 您正在搜索'/WSApiResponse/Function/something'XML 的根节点是否Response存在WSApiResponse

XML::LibXML::Node(预期返回的那种东西findnodes())的文档中,您应该寻找my $attrs = $nodes[0]->attributes()而不是$nodes[0]->getAttributes

于 2012-10-10T04:36:42.217 回答
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}

于 2012-10-10T04:38:12.893 回答