Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于没有内容的xsi:nil元素,Perl XML::Simple:SuppressEmpty?_Xml_Perl_Xml Simple - Fatal编程技术网

对于没有内容的xsi:nil元素,Perl XML::Simple:SuppressEmpty?

对于没有内容的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

我正在努力使用Perl中的XML::Simple和可空元素

这是我的示例XML:

<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";