-1

我在 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);
4

2 回答 2

0

好吧,我自己找到了解决问题的方法,但这仅适用于我的特定情况,因为我没有任何需要的属性。如果是这样,您可以更改线路

my $xmlHash = XMLin($xmlIn, SuppressEmpty => '');

my $xmlHash = XMLin($xmlIn, NoAttr => 1, SuppressEmpty => '');

这将切断所有属性并像常规的空元素一样返回一个空字符串。

如前所述,这仅在您不需要 xml 中的任何属性时才有效。如果你确实需要它们,这是行不通的。

于 2016-04-25T12:46:52.047 回答
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:为什么 XML::Simple “不鼓励”?

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

于 2016-05-06T22:39:57.617 回答