如何使用模板模块打印数据

时间:2011-11-04 13:37:34

标签: perl template-toolkit

我的英语有点差,所以如果不理解,请不要犹豫。 我有perl模板工具包模块的问题。这是我第一次使用这个模块的经历。我正在从文件中读取xml数据,我使用XML :: Simple(ForceArray)来解析和DATA :: Dumper进行打印。打印数据

$var1={

       'data'=>{
                  'employee'=>[
                            {
                           'name'=>'suraj',
                           'number'=>'f11a0478',
                           'adress'=>' badvel,kadapa,a.p,india',
                            },

                           {
                           'name'=>'misra',
                           'number'=>'047902',
                           'adress'=>' raipur,ananthapur,a.p,india',
                            }...........
                             ...........
                          ],          

    'company'=>{
              'name'=>'bosch',
              'location'=>'banglore',
              'domain'=>{
                     'java'=>{
                            'employee'=>[
                                     {
                                    'name'=>'suraj',

                                    'number'=>'f11a0478',

                                    'experience'=>{
                                              'years'=>'3',
                                              'projects'=>'4',

                                              }
                                           },
                                   {
                                    'name'=>'misra',

                                    'number'=>'047902',

                                    'experience'=>[
                                                 {
                                                  'years'=>'1',

                                                  'projects'=>'1',

                                                  },
                                                 {
                                             'years'=>'1',

                                             'projects'=>'1',

                                              }
                                             ]
                                           },   
                                          ]
                            }
                    }................
                    .................
             };

我使用了这样的模板工具包流程并打印在某个文件中,我编写了这样的代码

[% FOREACH comp IN company %]
[% comp.name %] 
[% comp.location%]
employeedata:
[% FOREACH employee IN comp.domain.java.employee %]
employee name: [% employee.name +%] numb [%+ employee.number %]
   [% FOREACH experience IN employee. experience %]
[% experience.years %]
[% experience.projects %]
 [% END %]
 [% END %]
[% END %]

从上面的脚本我可以打印公司员工,姓名,号码,经验,年份,项目。但我的问题是我还需要为这些信息添加员工的地址。我正在公司节点和所有公司打印所有信息。但是Address位于哈希中的其他一些键。通过使用员工姓名和号码(某些员工的姓名相同,有些人具有相同的号码),我需要找到地址并在员工详细信息中打印地址。帮我解决这个问题。我现在应该怎么做,如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

你可以这样做:

[% FOREACH de IN data.employee %]
  [% IF de.name == employee.name && de.number == employee.number %]
    [% de.address %]
    [% LAST %]
  [% END %]
[% END %]

我建议在使用TT处理之前对数据结构做一些事情,因为这不是很有效。如果comp.domain.java.employee和data.employee包含相同数量的元素,那么它就非常简单。

编辑:我在下面的评论中的意思是

[% FOREACH employee IN comp.domain.java.employee %]
  [% addresses = [] %]
  [% FOREACH de IN data.employee %]
    <!-- Name, experience etc. -->
    <!-- Then new address stuff: -->
    [% IF de.name == employee.name || de.number == employee.number %]
      [% addresses.push(de.address) %]
    [% END %]
  [% END %]
  [% addressStr = addresses.join(', '); addressStr.replace(', ([^,]+)$', ' or $1') %]
  [% addressStr %]
[% END %]

那不是打印像address1, address2 or address3这样的地址吗?