in reply to Problems getting info from .xml to display with HTML::Template

$template->param(DEPT => @deptartment);

Even if everything else were correct, this is certainly wrong, since HTML::Template expects an array reference, so use $template->param(DEPT => \@deptartment) instead.

(1) not getting the data from the .xml correctly, or

You can easily check that with Data::Dumper. Actually you can be sure that your data structure is wrong, because there is no nested XML structure in your input.

Please also use use strict; use warnings; in your script to prevent you from doing stupid mistakes.

Replies are listed 'Best First'.
Re^2: Problems getting info from .xml to display with HTML::Template
by Anonymous Monk on Jul 16, 2008 at 15:17 UTC
    XML now:
    <document> <position> <departments> <department name = "Nothing Selected" /> <department name = "Pricing and Shopping Systems" /> <department name = "Commercial" /> <department name = "Operations Hardware" /> <department name = "Corporate Marketing" /> <department name = "Legal" /> <department name = "Human Resources" /> <department name = "Finance" /> </departments> </position> </document>
    Perl now:
    #!/perl use strict; use warnings; use lib 'C:/xampp/perl/site/lib'; use HTML::Template; $ENV{XML_SIMPLE_PREFERRED_PARSER} = 'XML::Parser'; use XML::Simple; use Data::Dumper; my $template = HTML::Template->new(filename => 'file'); my $xml = XMLin('file', ForceArray => ['departments']); my @department = @{ $xml->{position}->{departments} }; $template->param(DEPT => \@deptartment); print $template->output;
    With strict on I get error: Global symbol "@department" requires explicit package name.

    With strict off I get no errors, but nothing shows up on my template.

    Using Dumper, my xml data looks right but displays something like

    $VAR1=[ {department => { 'Finance' => {}, 'Human Resources' => {} } ]
    I'm thinking maybe the empty curly braces have something to do with why it's not actually displaying anything?
      my @department ..
      ...
      $template->param(DEPT => \@deptartment);
      ...

      With strict on I get error: Global symbol "@department" requires explicit package name.

      Do you notice anything? removing strict only hides the error.

      And I think you'll be more successful if you structure your XML to contain the data in the tags:

      <document> <position> <departments> <department>Nothing Selected</department> <department>Pricing and Shopping Systems</department> ... </departments> </position> </document>

      But then again I didn't test it.

        Jeez, can't believe I missed that one! Spelling mistake fixed and tags updated, but now... more problems!

        I'm getting this error:

        HTML::Template->output() : fatal error in loop output : HTML::Template +::param() : attempt to set parameter 'department' with an array ref - parameter +is not a T MPL_LOOP! at C:/xampp/perl/site/lib/HTML/Template.pm line 3068 at file.pl line 18
        My .tmpl contains:
        <font size="4">Department: </font> <ul><li><select name="dept"> <TMPL_LOOP DEPT> <option value="<TMPL_VAR DEPARTMENT>"><TMPL_VAR DEPARTMENT></optio +n> </TMPL_LOOP> </select></li> </ul>
        and again my perl is:
        my @department = @{ $xml->{position}->{departments} }; $template->param(DEPT => \@department); print $template->output();
        Aren't you supposed to set the name of <TMPL_LOOP> to an array?