【问题标题】:Perl using XML Path Context to extract out dataPerl 使用 XML Path Context 提取数据
【发布时间】: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>

我想要&lt;something&gt; 节点的属性作为散列。我尝试如下

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]-&gt;getAttributes 的东西,有什么帮助吗?

【问题讨论】:

    标签: perl xml-parsing xml-libxml


    【解决方案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]-&gt;attributes() 而不是$nodes[0]-&gt;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-&gt;{Response}

    【讨论】:

    • 我也是。 XML::Simple 是要走的路。
    • 为什么你认为只能有一个Function? XML::Simple 是最复杂的 XML 模块。
    • 感谢您的回复...不过,@ikegami 的解决方案正是我所需要的。
    猜你喜欢
    • 2011-07-01
    • 1970-01-01
    • 2021-05-29
    • 2020-07-02
    • 2013-09-26
    • 2015-06-11
    • 2011-04-02
    • 1970-01-01
    相关资源
    最近更新 更多