-1

Perl の XML::Simple と null 可能な要素に苦労しています。

だから、これは私のXMLの例です:

<MyXml>
    <SomeNumber>123</SomeNumber>
    <EmptyOne/>
    <NullableElement xsi:nil="true"></NullableElement>
</MyXml>

これをXMLinSuppressEmpty => 1で読むと、 EmptyOneには空の文字列が返されますが、NullableElementにはxsi:nil="true"のハッシュが返されます。私の質問は、xsi:nil-Content を無視して空の文字列または undef を返すように XMLin に指示するにはどうすればよいですか? これは XML::Simple でも可能ですか、それとも Lib::XML に切り替える必要がありますか?

結果を確認するコードは次のとおりです。

use XML::Simple;
use Data::Dumper;

my $xmlIn = '<MyXml><SomeNumber>123</SomeNumber><EmptyOne/><NullableElement xsi:nil="true"></NullableElement></MyXml>';
my $xmlHash = XMLin($xmlIn, SuppressEmpty => '');

print Dumper($xmlHash);
4

2 に答える 2

0

自分の問題の解決策を自分で見つけましたが、必要な属性がないため、これは特定のケースでのみ機能します。もしそうなら、あなたは行を変更することができます

my $xmlHash = XMLin($xmlIn, SuppressEmpty => '');

my $xmlHash = XMLin($xmlIn, NoAttr => 1, SuppressEmpty => '');

これにより、すべての属性が切り取られ、通常の空の Element のような空の文字列が返されます。

前述のように、これは xml からの属性が必要ない場合にのみ機能します。それらが必要な場合、これは機能しません。

于 2016-04-25T12:46:52.047 に答える
0

XML::Twig

use XML::Twig;
my $xmlIn =
  '<MyXml><SomeNumber>123</SomeNumber><EmptyOne/><NullableElement xsi:nil="true"></NullableElement></MyXml>';

print XML::Twig->parse($xmlIn)->get_xpath( '//NullableElement', 0 )->text, "\n";

XML::Simple: XML::Simple が「推奨されない」のはなぜですか?

コードが脆弱になるため、使用する価値はありません。

于 2016-05-06T22:39:57.617 に答える