############################################## # $Id$ package main; use strict; use warnings; use POSIX; sub CommandXmlList($$); sub XmlEscape($); ##################################### sub XmlList_Initialize($$) { my %lhash = ( Fn=>"CommandXmlList", Hlp=>",list definitions and status info as xml" ); $cmds{xmllist} = \%lhash; } ##################################### sub XmlEscape($) { my $a = shift; return "" if(!defined($a)); $a =~ s/\\\n/
/g; # Multi-line $a =~ s/&/&/g; $a =~ s/"/"/g; $a =~ s//>/g; # Not needed since we've gone UTF-8 # $a =~ s/([^ -~])/sprintf("&#%02x;", ord($1))/ge; # Esacape characters 0-31, as they are not part of UTF-8 $a =~ s/([\x00-\x07])//g; # Forum #37955. Chrome wont accept 5 & 6. return $a; } ##################################### sub CommandXmlList($$) { my ($cl, $param) = @_; my $str = "\n"; my $lt = ""; my %filter; my @arr = devspec2array($param ? $param : ".*", $cl); # for Authorize map { $filter{$_} = 1 } @arr; for my $d (sort { my $x = $modules{$defs{$a}{TYPE}}{ORDER}.$defs{$a}{TYPE} cmp $modules{$defs{$b}{TYPE}}{ORDER}.$defs{$b}{TYPE}; $x = ($a cmp $b) if($x == 0); $x; } keys %defs) { next if(IsIgnored($d) || !$filter{$d}); my $p = $defs{$d}; my $t = $p->{TYPE}; if($t ne $lt) { $str .= "\t\n" if($lt); $str .= "\t<${t}_LIST>\n"; } $lt = $t; my $a1 = XmlEscape($p->{STATE}); my $a2 = XmlEscape(getAllSets($d)); my $a3 = XmlEscape(getAllAttr($d)); $str .= "\t\t<$t name=\"$d\" state=\"$a1\" sets=\"$a2\" attrs=\"$a3\">\n"; my $si = AttrVal("global", "showInternalValues", 0); foreach my $c (sort keys %{$p}) { next if(ref($p->{$c})); next if(!$si && $c =~ m/^\./); $str .= sprintf("\t\t\t\n", XmlEscape($c), XmlEscape($p->{$c})); } $str .= sprintf("\t\t\t\n", $p->{IODev}{NAME}) if($p->{IODev} && $p->{IODev}{NAME}); foreach my $c (sort keys %{$attr{$d}}) { next if(!$si && $c =~ m/^\./); $str .= sprintf("\t\t\t\n", XmlEscape($c), XmlEscape($attr{$d}{$c})); } my $r = $p->{READINGS}; if($r) { foreach my $c (sort keys %{$r}) { next if(!$si && $c =~ m/^\./); my $h = $r->{$c}; next if(!defined($h->{VAL}) || !defined($h->{TIME})); $str .= sprintf("\t\t\t\n", XmlEscape($c), XmlEscape($h->{VAL}), $h->{TIME}); } } $str .= "\t\t\n"; } $str .= "\t\n" if($lt); $str .= "\n"; return $str; } 1; =pod =item command =item summary show device data in XML format =item summary_DE zeigt Gerätedaten in XML Format an =begin html

xmllist

=end html =cut