Perl XML::Simple:xsi:nil 没有内容的元素的 SuppressEmpty?
Perl XML::Simple: SuppressEmpty for xsi:nil-Elements without content?
我在 Perl 和可为 null 的元素中苦苦挣扎 XML::Simple。
所以这是我的例子-XML:
<MyXml>
<SomeNumber>123</SomeNumber>
<EmptyOne/>
<NullableElement xsi:nil="true"></NullableElement>
</MyXml>
如果我用 XMLin 和 SuppressEmpty => 1 阅读这篇文章,我会得到一个空字符串EmptyOne,但是 xsi:nil="true" 的哈希 NullableElement .我的问题是,如何让 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);
好吧,我自己找到了解决问题的方法,但这只适用于我的特定情况,因为我没有任何我需要的属性。如果是这样,您可以更改行
my $xmlHash = XMLin($xmlIn, SuppressEmpty => '');
至
my $xmlHash = XMLin($xmlIn, NoAttr => 1, SuppressEmpty => '');
这将切断所有属性和return一个空字符串,就像一个普通的空元素。
如前所述,这仅在您不需要 xml 中的任何属性时才有效。如果您确实需要它们,这将不起作用。
在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
:
它只是不值得使用,因为它是通往脆弱代码的道路。
我在 Perl 和可为 null 的元素中苦苦挣扎 XML::Simple。
所以这是我的例子-XML:
<MyXml>
<SomeNumber>123</SomeNumber>
<EmptyOne/>
<NullableElement xsi:nil="true"></NullableElement>
</MyXml>
如果我用 XMLin 和 SuppressEmpty => 1 阅读这篇文章,我会得到一个空字符串EmptyOne,但是 xsi:nil="true" 的哈希 NullableElement .我的问题是,如何让 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);
好吧,我自己找到了解决问题的方法,但这只适用于我的特定情况,因为我没有任何我需要的属性。如果是这样,您可以更改行
my $xmlHash = XMLin($xmlIn, SuppressEmpty => '');
至
my $xmlHash = XMLin($xmlIn, NoAttr => 1, SuppressEmpty => '');
这将切断所有属性和return一个空字符串,就像一个普通的空元素。
如前所述,这仅在您不需要 xml 中的任何属性时才有效。如果您确实需要它们,这将不起作用。
在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
:
它只是不值得使用,因为它是通往脆弱代码的道路。