强制perl XMLin将空标记视为空字符串?

卡因酒

具有以下内容:

perl -MXML::LibXML::Simple -MData::Dumper -E '$h=XMLin("<some><bubu>string</bubu></some>");say Dumper $h'

解析为:

$VAR1 = {
          'bubu' => 'string'
        };

但是

perl -MXML::LibXML::Simple -MData::Dumper -E '$h=XMLin("<some><bubu/></some>"); say Dumper $h'

或者

perl -MXML::LibXML::Simple -MData::Dumper -E '$h=XMLin("<some><bubu></bubu></some>");say Dumper $h'

印刷:

$VAR1 = {
          'bubu' => {}
        };

有可能得到

$VAR1 = {
          'bubu' => ""
        };

要与其他字符串值一致吗?

问题背后的实际代码如下:

package Something {
    use Moose;
    has 'bar' => (is => 'ro', isa => 'Str');
    has 'baz' => (is => 'ro', isa => 'Str');
}

use 5.014;
use warnings;
use XML::LibXML::Simple;

my $xml = do {local $/, <DATA>};
my $hr = XMLin($xml);
for my $node( @{$hr->{node}} ) {
    my $obj = Something->new($node);
}
__DATA__
<root>
<node>
    <bar>bar1</bar>
    <baz>baz1</baz>
</node>
<node>
    <bar>bar2</bar>
    <baz/>
</node>
</root>

死于

Attribute (baz) does not pass the type constraint because: Validation failed for 'Str' with value HASH(0x7f91a4a92450) at /opt/anyenv/envs/plenv/versions/5.24.0/lib/perl5/site_perl/5.24.0/darwin-2level/Moose/Object.pm line 24
    Moose::Object::new('Something', 'HASH(0x7f91a3f3d430)') called at l line 28

因此我需要

  • 把空的baz不是{},但作为''
  • 或在包中添加强制强制将Something任何空hash引用强制{}为空字符串''

对简单方法有任何想法吗?

编辑

因此,结果。接受的答案仍然存在,因为它为上述问题提供了答案。

但是必须要说的是,在研究了新的(非常复杂的)模块XML :: Twig + learningXPath的基础知识3天之后,我得到了一个解决方案,它比该XMLIn解决方案更清晰,更好

XMLIni中,我需要重新组织得到的hashref,因为只需要几个元素并具有精确定义的结构即可。(对于构造函数可接受)。这样的重组(删除不需要的成员,将更深的hashref的值移动到arrayrefs等)在perl中容易,但是代码不是很好,并且需要解决上述问题。

使用XML :: Twig(和此处的2个后续问题),结果比XMLIn更加整洁,可读性强,时间确实最好牺牲一些时间并学习(至少是基础知识)XPath...

黄昏-无效-

XML :: LibXML :: Simple似乎没有启用此行为的选项。

XML :: Simple可以,但是;设置SuppressEmpty为空字符串以将空节点解析为字符串而不是容器:

# perl -MXML::Simple -MData::Dumper \
  -E '$h=XMLin("<some><bubu></bubu></some>", SuppressEmpty => ""); say Dumper $h'

$VAR1 = {
      'bubu' => ''
    };

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

强制perl XMLin将空标记视为空字符串?

来自分类Dev

将空查询字符串参数视为空字符串,而不使用参数类

来自分类Dev

强制MySQLdb将所有MySQL数据视为字符串

来自分类Dev

强制将路由占位符始终视为查询字符串参数

来自分类Dev

强制MySQLdb将所有MySQL数据视为字符串

来自分类Dev

如果未定义,则强制 javascript 将变量视为字符串

来自分类Dev

强制自动递增将其参数视为字符串

来自分类Dev

强制使用REAL非空字符串引用类型

来自分类Dev

perl-如何将字符串视为二进制数?

来自分类Dev

Perl JSON将所有数字视为字符串

来自分类Dev

Perl6字符串强制运算符〜不喜欢前导零

来自分类Dev

删除数组的Perl哈希中的空字符串

来自分类Dev

删除数组的Perl哈希中的空字符串

来自分类Dev

Perl-连接非空字符串

来自分类Dev

Perl dbi(选择)获取数组中的空字符串

来自分类Dev

Tomcat 8(和9)强制行为,空字符串被错误地设置为空字符串

来自分类Dev

将JoinColumn中的空字符串视为null

来自分类Dev

为什么将空字符串文字视为true?

来自分类Dev

javascript处理将双引号视为空字符串

来自分类Dev

捕获 tic 标记之间的子字符串的 perl regrex

来自分类Dev

如何将强制和可选命令行参数都传递给perl脚本?

来自分类Dev

perl如何将布尔值强制为0/1

来自分类Dev

Perl:强制模块继承

来自分类Dev

在存储过程中,空字符串是否被视为空参数?

来自分类Dev

CsvToBean 将字符串值视为空

来自分类Dev

强制熊猫将Nan读为字符串

来自分类Dev

将字符串从xml强制转换为类对象

来自分类Dev

将类型streamreader强制转换为字符串

来自分类Dev

Dataweave 2.0 - 无法将字符串强制为 LocalDateTime

Related 相关文章

热门标签

归档