我的英语有点差,所以如果不理解,请不要犹豫。 我有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位于哈希中的其他一些键。通过使用员工姓名和号码(某些员工的姓名相同,有些人具有相同的号码),我需要找到地址并在员工详细信息中打印地址。帮我解决这个问题。我现在应该怎么做,如何解决这个问题。
答案 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
这样的地址吗?