嗨,我有这样的 xml 数据
<university>
<name>svu</name>
<location>ravru</location>
<branch>
<electronics>
<Section>
<student name="xxx" number="12">
<sem semister="1"subjects="7" rank="1"/>
<sem semister="2"subjects="4" rank="1"/>
<student>
<student name="xxx" number="15">
<sem semister="1"subjects="7" rank="10"/>
<sem semister="2"subjects="4" rank="1"/>
<student>
<student name="xxx" number="16">
<sem semister="1"subjects="7" rank="2"/>
<sem semister="2"subjects="4" rank="2"/>
<student>
</section>
</electronics>
</branch>
</university>
<university>
<name>sku</name>
<location>ANTP</location>
<branch>
<computers>
<Section>
<student name="xxx" number="12">
<sem semister="1"subjects="7" rank="no"/>
<sem semister="2"subjects="4" rank="no"/>
<student>
<student name="xxx" number="15">
<sem semister="1"subjects="7" rank="10"/>
<sem semister="2"subjects="4" rank="1"/>
<student>
<student name="xxx" number="16">
<sem semister="1"subjects="7" rank="20"/>
<sem semister="2"subjects="4" rank="21"/>
<student>
</section>
</electronics>
</branch>
</university>
我使用 XML::Simple 生成散列结构化数据并存储在一个变量中。我使用 template::toolkit 生成 pdffile(使用 pdflatex)。我的 XML::simple 输出是这样的
$var1={
university=>{
'name'=>'svu',
'location'=>'ravru',
'branch'=>{
'electronics'=>{
'section'=>[
{
'name'=>'xxx',
'number'=>'12',
'sem'=>[
{
'semister'=>'1',
'subjects'=>'7',
'rank'=>'1'
},
{
'semister'=>'2',
'subjects'=>'4',
'rank'=>'1'
}
]
},
{
'name'=>'xxx',
'number'=>'15',
'sem'=>[
{
'semister'=>'1',
'subjects'=>'7',
'rank'=>'10'
},
{
'semister'=>'1',
'subjects'=>'7',
'rank'=>'1'
}
]
},
{
'name'=>'xxx',
'number'=>'16',
'sem'=>[
{
'semister'=>'1',
'subjects'=>'7',
'rank'=>'2'
},
{
'semister'=>'2',
'subjects'=>'4',
'rank'=>'2'
}
]
}
}
]
}
};
像这样,我有 15 所大学,还有一些部门只有两三个学生,有的有 10 个学生,在学生中,有的只有一个 sem,有的有两个学期。我这样写模板
my $template = Template->new();
my $filename = 'output.tex';
$template->process(\*DATA, $data, $filename)
|| die "Template process failed: ", $template->error(), "\n";
system( "pdflatex $filename" );
__DATA__
\documentclass[a4paper,leqno,twoside]{article}
\begin{document}
[% FOREACH st = university %]
[%+ st.name +%]
[%+ st.location +%]
[% FOREACH section = st.branch.electronics.section %]
branch student: [%+ section.name +%]
[%+ section.number +%]
[% FOREACH sem = section.sem %]
[%+ sem.semister +%]
[%+ sem.subjects +%]
[%+ sem.rank +%]
[% END %]
[% END %]
[% END %]
/end{document}
像这样它给出了输出,但我的问题是它太长了,而且我在上面说有些部分有两个学生,有些部分有两个以上。例如,第一部分包含 1 名学生,第二部分包含 10 名学生。但在 pdf 第一部分也打印 10 个学生,只有第一个学生的信息全部为空。我怎样才能消除这个问题。如果您不理解我的问题,我该如何使用比我编写的更短的代码来获取数据。有没有其他方法可以更简单地使用 for 循环来获取分支元素或任何简单的代码。因为如果某个部分有 60 名学生,那么它会在每个部分中打印 6o。