0

XMLファイルからすべての「NodeGroup」要素を引き出す必要があります。

<Database>
  <Get>
    <Data>
      <NodeGroups>
        <NodeGroup>
          <AssociateNode ConnID="6748763_2" />
          <AssociateNode ConnID="6748763_1" />
          <Data DataType="Capacity">2</Data>
          <Name>Alpha</Name>
        </NodeGroup>
        <NodeGroup>
          <AssociateNode ConnID="6748763_23" />
          <AssociateNode ConnID="6748763_7" />
          <Data DataType="Capacity">2</Data>
          <Name>Charlie</Name>
        </NodeGroup>
        <NodeGroup>
          <AssociateNode ConnID="6748763_98" />
          <AssociateNode ConnID="6748763_12" />
          <Data DataType="Capacity">2</Data>
          <Name>Papa</Name>
        </NodeGroup>
        <NodeGroup>
          <AssociateNode ConnID="6748763_8" />
          <AssociateNode ConnID="6748763_45" />
          <Data DataType="Capacity">2</Data>
          <Name>Yankee</Name>
        </NodeGroup>
      </NodeGroups>
      <System>
        ...
      </System>
    </Data>
  </Get>
</Database>

PythonとBeautifulSoupを使用できる場合は、xmlを解析して、次のように呼び出します。

node_group_array = soup.findAll("nodegroups")

しかし、私はPerlとPerlのXMLモジュールを使用しているので、XML :: SimpleのXMLInを使用して、各ハッシュキーを再帰的にウォークスルーし、値がハッシュであるかどうかを確認し、「NodeGroup」ハッシュであるかどうかを確認しました。

PerlのXMLモジュールの1つにsoup.findAll()のようなものがあると思いますが、見つかりません。Perlで「soup.findAll('nodegroups')」を実行するにはどうすればよいですか?

4

4 に答える 4

3

XML::LibXML::XPathContextRandalの答えを少し明確にするために、ディストリビューションによって提供されるAPIが必要だと思いますXML::LibXML

my $xpath = XML::LibXML::XPathContext->new($document);
for my $node ( $xpath->find('//NodeGroup') { ... }
于 2009-11-18T00:27:33.993 に答える
1

以下のデータファイルでXML::Simpleを使用します。

#!/usr/bin/perl

use strict; use warnings;

use XML::Simple;

my $db = XMLin($ARGV[0]);
my $nodegroups = $db->{Get}{Data}{NodeGroups}{NodeGroup};

use Data::Dumper;
print Dumper $nodegroups;

複数のセクションを持つファイルと単一のセクションをForceArray => 1持つファイルがある場合、このオプションを使用して一貫性を保証することができます。<NodeGroups>...</NodeGroups>

ファイルが大きすぎない場合は、使用してもXML::Simple問題ありません。ドキュメントの警告セクションも参照してください。

于 2009-11-18T03:32:59.470 に答える
1

Perl には「XML」モジュールはありません。XML::名前空間には多くのモジュールがあります。私のお気に入りは ですが、この単純なものでは、「xml-mode」XML::LibXMLでも使用できます。HTML::Parser

于 2009-11-17T23:08:29.363 に答える
1

XML::DOM には、同じ名前の DOM 関数のように機能する getElementsByTagName (XML::LibXML::DOM および XML::GDOME も同様) があります。

于 2009-11-18T02:04:04.210 に答える