我有一个大型XML文件,我需要转换一个特定元素。
其文字内容应成为属性。
<myelement>textContent</myelement>
到
<myelement newAttribute="textContent">textContent</myElement>
还有更多内容,但上面代表了我的结晶问题。
我正在使用Perl和SAX过滤器到达我现在的位置,之后我将需要使用Perl和SAX,因为DOM不可能用于我做的一些事情,因为整个文件很大。
我的问题是 - 上述转换可以在Perl&amp;萨克斯也 - 如果是这样,怎么样?
我到目前为止的代码 - 但它产生了令人敬畏的垃圾
package addContentToAttributes;
use base qw(XML::SAX::Base);
my $inReference = 0;
my $referenceContent = "";
sub start_element {
my ($self, $element) = @_;
}
if (($element->{Name} eq "myelement"){
$inMyElement = 1;
$myElementContent = "";
}
else {
$self->SUPER::start_element($element);
}
}
sub characters{
my($self,$element) = @_;
if ($inmyElement) {
$myElementContent = $myElementContent.$element->{Data};
}
else {
$self->SUPER::characters($element)
}
;
}
sub end_element {
my ($self, $element) = @_;
if (($element->{Name} eq "myElement") {
my $newNode = { };
%$newNode = %$self;
$newNode->{Name} = 'myElement';
$ref_node->{Attributes}{'{}newAttribute'} = { Name =>"newAttribute", Value=>$myElementContent};
$self->SUPER::start_element($newNode);
$self->SUPER::characters({Data => $myElementContent});
$self->SUPER::end_element($newNode);
}
else {
$self->SUPER::end_element($element)};
}
1;