对于没有内容的xsi:nil元素,Perl XML::Simple:SuppressEmpty?
我正在努力使用Perl中的XML::Simple和可空元素 这是我的示例XML:对于没有内容的xsi:nil元素,Perl XML::Simple:SuppressEmpty?,xml,perl,xml-simple,Xml,Perl,Xml Simple,我正在努力使用Perl中的XML::Simple和可空元素 这是我的示例XML: <MyXml> <SomeNumber>123</SomeNumber> <EmptyOne/> <NullableElement xsi:nil="true"></NullableElement> </MyXml> 123 如果我用XMLin和SuppressEmpty=>1来阅读这篇文章,我将为Em
<MyXml>
<SomeNumber>123</SomeNumber>
<EmptyOne/>
<NullableElement xsi:nil="true"></NullableElement>
</MyXml>
123
如果我用XMLin和SuppressEmpty=>1来阅读这篇文章,我将为EmptyOne获取一个空字符串,但为NullableElement获取一个xsi:nil=“true”的散列。我的问题是,我如何告诉XMLin忽略xsi:nil内容,只给我一个空字符串或unde?这在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);
使用XML::Simple;
使用数据::转储程序;
我的$xmlIn='123';
我的$xmlHash=XMLin($XMLin,SuppressEmpty=>“”);
打印转储程序($xmlHash);
我自己找到了解决问题的方法,但这只适用于我的具体情况,因为我没有需要的任何属性。如果是这样,您可以更改线路
my $xmlHash = XMLin($xmlIn, 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::Twig;
我的$xmlIn=
'123';
打印XML::Twig->parse($xmlIn)->获取xpath('//nullablelement',0)->文本,“\n”;
XML::Simple
:
它不值得使用,因为这是一条通往脆弱代码的道路 你有没有看到人们对
XML::Simple
的强烈反感?我很惊讶你们并没有被大量的答案淹没,这些答案告诉你们要看哪个写着“你们真的不想在新代码中使用这个模块”。请尝试或保存一些tears在我的典型项目中,我自己使用XML::LibXML。在这种情况下,我只是采纳了一位同事的项目;)我想知道是否还有其他解决方案可以实现这一点,正如我在问题中提到的,我没有被迫使用XML::Simple。坚持使用XML::Twig
XML::LibXML
。
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";