summaryrefslogtreecommitdiff
path: root/Xerl/XML
diff options
context:
space:
mode:
Diffstat (limited to 'Xerl/XML')
-rw-r--r--Xerl/XML/SAXHandler.pm18
1 files changed, 17 insertions, 1 deletions
diff --git a/Xerl/XML/SAXHandler.pm b/Xerl/XML/SAXHandler.pm
index 7bcb3f0..9aa1e9d 100644
--- a/Xerl/XML/SAXHandler.pm
+++ b/Xerl/XML/SAXHandler.pm
@@ -40,9 +40,13 @@ sub start_element {
my %params = map { $_->{Name} => $_->{Value} } values %{ $doc->{Attributes} };
+ # Extract name and flags from a tag such as: <NAME.xerl.FLAG1.FLAG2.FLAGN...>..
+ my ($name, @flags) = _GET_NAME_N_FLAG($doc->{Name});
+
$x->{current} = Xerl::XML::Element->new();
$x->{current}->set_text('');
- $x->{current}->set_name( $doc->{Name} );
+ $x->{current}->set_name( $name );
+ $x->{current}->set( "flag_$_", 1 ) for @flags;
$x->{current}->set_params( \%params ) if %params;
${ $x->{stack} }[-1]->push_array( $x->{current} ) if @{ $x->{stack} };
@@ -73,4 +77,16 @@ sub end_element {
return undef;
}
+sub _GET_NAME_N_FLAG ($) {
+ my $string = shift;
+
+ my ($name, $flags) = $string =~ /^(.+)\.xerl\.(.*)$/;
+
+ if (defined $flags) {
+ return ($name, split(/\./, $flags));
+ } else {
+ return ($string);
+ }
+}
+
1;