File: xml2html.pl

package info (click to toggle)
otrs2 2.2.7-2lenny3
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 13,444 kB
  • ctags: 5,808
  • sloc: perl: 129,825; xml: 16,139; sql: 11,400; sh: 1,198; makefile: 31; php: 16
file content (126 lines) | stat: -rwxr-xr-x 3,698 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#!/usr/bin/perl -w
# --
# xml2html.pl - a "_simple_" xml2html viewer
# Copyright (C) 2001-2007 OTRS GmbH, http://otrs.org/
# --
# $Id: xml2html.pl,v 1.9 2007/02/06 19:30:26 martin Exp $
# --
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
# --

# use ../../ as lib location
use FindBin qw($Bin);
use lib "$Bin/../..";
use lib "$Bin/../../Kernel/cpan-lib";

use strict;
use Kernel::Config;
use Kernel::System::Log;
use Kernel::System::Main;
use Kernel::System::Time;
use Kernel::System::DB;
use Kernel::System::XML;

my $ConfigObject = Kernel::Config->new();
my $LogObject = Kernel::System::Log->new(
    ConfigObject => $ConfigObject,
);
my $MainObject = Kernel::System::Main->new(
    ConfigObject => $ConfigObject,
    LogObject => $LogObject,
);
my $DBObject = Kernel::System::DB->new(
    MainObject => $MainObject,
    ConfigObject => $ConfigObject,
    LogObject => $LogObject,
);
my $XMLObject = Kernel::System::XML->new(
    MainObject => $MainObject,
    ConfigObject => $ConfigObject,
    LogObject => $LogObject,
    DBObject => $DBObject,
);

my $Title = 'xml2html: ';
my $HTML = '';
my $Layer = -1;
my $File = shift;
my $FileContent = '';

if ($File) {
    open(IN, "< $File") || die "Can't open file $File: $!";
    while (<IN>) {
        $FileContent .= $_;
    }
    close (IN);
}
else {
    my @File = <STDIN>;
    foreach (@File) {
        $FileContent .= $_;
    }
}

my @XMLARRAY = $XMLObject->XMLParse(String => $FileContent);

foreach my $Tag (@XMLARRAY) {
    if ($Tag->{TagType} eq 'Start') {
        $Layer++;
        if ($Layer == 0) {
            $Title .= $Tag->{Tag};
        }
        $HTML .= "<span style=\"font-family:Geneva,Helvetica,Arial,sans-serif;vertical-align:top;margin:".($Layer*18)."px\">";
        $HTML .= "<hr width=\"".(100-($Layer*2))."%\" align=\"right\">\n";
        $HTML .= "<b>$Tag->{Tag}:</b>";
        $HTML .= " <font size=\"-2\">";
        my $AttrList = '';
        foreach (sort keys %{$Tag}) {
            if ($_ =~ /^(Tag|TagType|Content)$/) {
                next;
            }
            if ($AttrList) {
                $AttrList .= ", ";
            }
            $AttrList .= "$_: $Tag->{$_}";
        }
        if ($AttrList) {
            $AttrList = "(".$AttrList.")";
        }
        $HTML .= "$AttrList</font>";
        $HTML .= "<br>";
        $HTML .= "</span>\n";
        if ($Tag->{Content} !~ /^\W+$/) {
            $Tag->{Content} =~ s/(.{100}.+?\s)/$1\n/g;
            $Tag->{Content} =~ s/  /&nbsp; /g;
            my @Data = split(/\n/, $Tag->{Content});
            foreach (@Data) {
                $HTML .= Content($_);
            }
        }
    }
    elsif ($Tag->{TagType} eq 'End') {
        $Layer = $Layer - 1;
    }
}

sub Content {
    my $C = shift;
    return "<span style=\"font-size:10pt;font-family:monospace,fixed;margin:".(($Layer*20)+5)."px;\">$C<br>\n</span>";
}

$HTML = "<html><head><title>$Title</title></head><body><center><table width=\"900\"><tr><td>\n".$HTML;
$HTML .= "<hr></td></tr></table></center></body></html>\n";

print $HTML;