[英]Perl XML::Simple: SuppressEmpty for xsi:nil-Elements without content?
我正在为 Perl 中的 XML::Simple 和可为空元素而苦苦挣扎。
所以这是我的示例-XML:
<MyXml>
<SomeNumber>123</SomeNumber>
<EmptyOne/>
<NullableElement xsi:nil="true"></NullableElement>
</MyXml>
如果我使用XMLin和SuppressEmpty => 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);
好吧,我自己找到了解决问题的方法,但这仅适用于我的特定情况,因为我没有任何需要的属性。 如果是这样,您可以更改行
my $xmlHash = XMLin($xmlIn, SuppressEmpty => '');
到
my $xmlHash = XMLin($xmlIn, NoAttr => 1, SuppressEmpty => '');
这将切断所有属性并返回一个空字符串,就像一个普通的空元素。
如前所述,这仅在您不需要来自 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
: 为什么 XML::Simple “不受欢迎”?
它只是不值得使用,因为它是通往脆弱代码的道路。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.