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该评论针对的是谁?