私はXMLとXMLファイルを解析しています:: Simpleはあなたが見ることができるようにこれはサンプルXML文書XML :: Simpleを使用して未定義の参照を処理する方法
<ip>
<hostname>foo</hostname>
<info>server</info>
<soluton>N/A</solution>
<cats>
<cat>
<title>Baz</title>
<flags>0</flags>
</cat>
<cat><title>FooBar</title></cat>
</cats>
</ip>
<ip>
<info>client</info>
<diagnosis>N/A</diagnosis>
<cats>
<cat><title>Foo</title></cat>
<cat>
<title>Bar</title>
<update>Date</update>
</cat>
</cats>
</ip>
でこれらのオプションに
my $xml = XML::Simple->new(ForceArray => 1, KeyAttr => 1, KeepRoot => 1);
を使用して、いないすべてのノードは、ホスト名属性を持っています、これは私のスクリプトは、私は、ホスト名
$nb = "@{ $_->{hostname} }";
を取得しようとすると、いくつかのOPTIOがありますが、エラー「ARRAYのリファレンスとして未定義の値を使用することはできません」と死ぬことを引き起こしxmlの要素(十数個以上)。私はそれをどのように扱うべきですか? 割り当て前に要素の存在を確認する必要がありますか?
if (@{ $_->{hostname}) { $nb = "@{ $_->{hostname} }" }
if (@{ $_->{solution}) { $s = "@{ $_->{solution} }" }
if (@{ $_->{diagnosis}) {...}
評価ブロックを使用する必要がありますか?
eval { $nb = "@{ $_->{hostname} }" };
たぶん
eval {
$nb = "@{ $_->{hostname} }";
$s = "@{ $_->{solution} }";
$d = "@{ $_->{diagnosis} }";
};
良い方法はありますか?
も参照されます:[XMLからステップアップ:: XMLへの簡単な::のlibxml](http://www.perlmonks.org/index.pl?node_id= 490846) –
あなたが提供した両方のソリューション(* if *または* eval *を使用して価値をチェックする)は、私にとっては問題ありません。 – m0skit0