我正在使用Perl和Nullable Elements中的XML :: Simple。
所以这是我的例子 - XML:
<MyXml>
<SomeNumber>123</SomeNumber>
<EmptyOne/>
<NullableElement xsi:nil="true"></NullableElement>
</MyXml>
如果我使用 XMLin 和 SuppressEmpty =&gt;阅读此内容1 我将获得 EmptyOne 的空字符串,但 NullableElement xsi:nil =“true”的哈希值>。我的问题是,如何告诉XMLin忽略xsi:nil-Content并给我一个空字符串或undef?这甚至可以用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);
答案 0 :(得分:0)
我自己找到了解决问题的方法,但这只适用于我的具体情况,因为我没有任何我需要的属性。如果是这样,您可以更改行
my $xmlHash = XMLin($xmlIn, SuppressEmpty => '');
到
my $xmlHash = XMLin($xmlIn, NoAttr => 1, SuppressEmpty => '');
这将切断所有属性并返回一个空字符串,就像常规的空元素一样。
如前所述,只有在您不需要xml的任何属性时,这才有效。如果你确实需要它们,那就不行了。
答案 1 :(得分: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
:Why is XML::Simple "Discouraged"?
它不值得使用,因为它是通向脆弱代码的道路。