Perl XML::Twig在封闭前添加空间>;

Perl XML::Twig在封闭前添加空间>;,perl,xml-twig,Perl,Xml Twig,我有: <data id="010" name="Common" action="text"> ... </data> ... 如何使用XML::Twig在“>”之前添加空间,例如: <data id="010" name="Common" action="text" > </data> 有什么想法吗?这并不漂亮,但是您可以改变XML::Twig输出开始标记的方式。 方法是start\u tag,在XML::Twig::Elt

我有:

<data id="010" name="Common"  action="text"> 
...
</data>

...
如何使用XML::Twig在“>”之前添加空间,例如:

<data id="010" name="Common"  action="text" > 

</data>


有什么想法吗?

这并不漂亮,但是您可以改变XML::Twig输出开始标记的方式。 方法是
start\u tag
,在XML::Twig::Elt中

最干净的方法是将XML::Twig::Elt子类化(如下面代码中的
my_Elt
),并更改原始
start_标记的输出

#!/usr/bin/env perl

use strict;
use warnings;

use XML::Twig;
# elements will be created as "my_elt" instead of XML::Twig::Elt                      
my $t= XML::Twig->new( elt_class => 'my_elt')  
                ->parse( '<data id="010" name="Common"> text </data>')
                ->print;


# create a new class, based on 'XML::Twig::Elt'
package my_elt;
use base 'XML::Twig::Elt';

# my_elt only tweaks start_tag
sub start_tag
  { my $s= shift->SUPER::start_tag(); # get the original start tag
    $s=~ s{(>\s*)$}{ $1}s;            # replace the last '>' by ' >'
    return $s;                        # voilà!
  }
#/usr/bin/env perl
严格使用;
使用警告;
使用XML::Twig;
#元素将被创建为“my_elt”,而不是XML::Twig::elt
my$t=XML::Twig->new(elt\u class=>“my\u elt”)
->解析('text')
->印刷品;
#基于“XML::Twig::Elt”创建一个新类
打包我的英语;
使用基本'XML::Twig::Elt';
#我的英语教学只调整开始标签
子启动标签
{my$s=shift->SUPER::start_tag();#获取原始的开始标记
$s=~s{(>\s*)$}{$1}s;#将最后一个'>'替换为'>'
返回$s;#瞧!
}

这并不漂亮,但您可以更改XML::Twig输出开始标记的方式。 方法是
start\u tag
,在XML::Twig::Elt中

最干净的方法是将XML::Twig::Elt子类化(如下面代码中的
my_Elt
),并更改原始
start_标记的输出

#!/usr/bin/env perl

use strict;
use warnings;

use XML::Twig;
# elements will be created as "my_elt" instead of XML::Twig::Elt                      
my $t= XML::Twig->new( elt_class => 'my_elt')  
                ->parse( '<data id="010" name="Common"> text </data>')
                ->print;


# create a new class, based on 'XML::Twig::Elt'
package my_elt;
use base 'XML::Twig::Elt';

# my_elt only tweaks start_tag
sub start_tag
  { my $s= shift->SUPER::start_tag(); # get the original start tag
    $s=~ s{(>\s*)$}{ $1}s;            # replace the last '>' by ' >'
    return $s;                        # voilà!
  }
#/usr/bin/env perl
严格使用;
使用警告;
使用XML::Twig;
#元素将被创建为“my_elt”,而不是XML::Twig::elt
my$t=XML::Twig->new(elt\u class=>“my\u elt”)
->解析('text')
->印刷品;
#基于“XML::Twig::Elt”创建一个新类
打包我的英语;
使用基本'XML::Twig::Elt';
#我的英语教学只调整开始标签
子启动标签
{my$s=shift->SUPER::start_tag();#获取原始的开始标记
$s=~s{(>\s*)$}{$1}s;#将最后一个'>'替换为'>'
返回$s;#瞧!
}

为什么要这样做?我正在尝试生成与其他系统在不同语言上生成的xml相同的xml,它应该是完全相同的(即在执行diff时应该没有差异),这是一个要求。好吧,这是一个令人讨厌的要求,因为任何一致的XML解析器都会忽略空格,所以您应该能够生成一个diff,该diff也会忽略空格字符的更改。但是,查看
XML::Twig
的代码,唯一的方法是重写
XML::Twig::end_标记()
请告诉我,
“Common”
action
之间的两个空格也可以忽略?@vanHoesel该评论针对的是谁?你为什么要这样做?我正在尝试生成其他系统在不同语言上生成的相同xml,它应该完全相同(即,当进行差异时,应无差异),这是一个要求。好吧,这是一个令人讨厌的要求,因为任何符合要求的XML解析器都会忽略空格,您应该能够生成一个忽略空格字符更改的diff。但是查看
XML::Twig
的代码,唯一的方法是重写
XML::Twig::end_tag()
请告诉我,
“Common”
action
之间的两个空格也可以忽略?@vanHoesel该评论针对的是谁?