Perl XML :: Simple:对于没有内容的xsi:nil-Elements的SuppressEmpty?

时间:2016-04-25 12:02:03

标签: xml perl xml-simple

我正在使用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);

2 个答案:

答案 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::SimpleWhy is XML::Simple "Discouraged"?

它不值得使用,因为它是通向脆弱代码的道路。