2

XMLを使用してPerlコードで入力タグを並べ替える方法::XML形式で出力を指定された順序で印刷するためのシンプルなモジュール..私はこれを試しました

    use XML::Simple;
    use Data::Dumper;
    open (FH,"> xml4.txt") || die (); 
    # create array
    @arr = {
        'name'=>['Cisco102'],
        'SSIDConfig'=>[
                {'SSID'=> [{'name'=>'Cisco102'}]}],
        'connectionType'=>['ESS'],
        'connectionMode'=>['auto'],
        'autoSwitch'=>['false'],
        'MSM'=>[{'security' =>[ { 'authEncryption' =>[{'authentication' => 'open',
                        'encryption' => 'WEP',
                          'useOneX' => 'false'
                                        }],
                      'sharedKey' =>[ {
                                     'keyType' => 'networkKey',
                                     'protected' => 'false',
                                     'keyMaterial' => '1234567890'
                                   }]}]}]};
# create object
$xml = new XML::Simple(NoAttr=>1,RootName=>'WLAN Profile');
# convert Perl array ref into XML document
 $data = $xml->XMLout(@arr,xmldecl => '<?xml version="1.0" encoding="US-ASCII"?>');
# access XML data
print FH $data;

しかし、必要な順序が得られません。順序が必要です-> name、SSID Config、Connectionmode、connectiontype、autoswitch、MSM .help me

4

2 に答える 2

2

ハッシュは注文されていません。通常のハッシュの代わりに、 Tie :: IxHash(ハッシュのように見えますが、挿入順序を維持します)を使用してみることができます。それが機能しない場合、XML::Simpleは役に立ちません。

于 2011-09-28T06:26:28.630 に答える
2

XMLには2つのものが必要だと私には思えます。

  • 属性がないためNoAttr、XML::Simpleオブジェクト作成のオプション
  • 要素の順序は指定されたとおりにする必要があります

XMLに属性が必要ない理由と、それを作成するために使用するデータ構造に属性がある理由がわかりません。あなたはそれを調べたいと思うかもしれません。いずれにせよ、XML::Simpleはこの機能を提供します。

2番目の部分では、XML :: Simpleは順序を維持しません。私はそれを実行する方法を見つけられなかったので、何か他のものが必要になります。

迅速で汚い解決策として、XML::Twigを少し追加すると次のようになります。

# instead of the print FH $data; line

my $twig= XML::Twig->new( )->parse( $data);
$twig->root->set_content( map { $dtwig->root->first_child( $_) } (qw( name SSIDConfig connectionMode connectionType autoSwitch MSM)) );

$twig->print( \*FH);

さらにいくつかのコメント:

  • ルートタグとして「WLANプロファイル」を使用することはできません。XML名にスペースを含めることはできません
  • Perlについて質問するときは、厳密な警告を使用するコードを表示することは一般的に礼儀正しいと見なされます
  • 出力ファイルを開く適切な方法はmy $out_file= xml4.txt; open ( my $fh,'>', $out_file) or die "cannot create $out_file: $!";(またはautodieの代わりに使用するdie)、3つの引数を開いて字句ファイルハンドルを使用するのが良い習慣です(3つの引数を開いた警察署からのこのメッセージ;-)
于 2011-09-28T10:44:32.437 に答える