XML SAX在内容之外创建属性

时间:2015-08-13 07:55:02

标签: xml attributes sax

我有一个大型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;

0 个答案:

没有答案