繁体   English   中英

Perl XML::Simple: SuppressEmpty for xsi:nil-Elements without content?

[英]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>

如果我使用XMLinSuppressEmpty => 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM