Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何使用模板工具包获取这些元素_Perl_Templates_Template Toolkit - Fatal编程技术网

Perl 如何使用模板工具包获取这些元素

Perl 如何使用模板工具包获取这些元素,perl,templates,template-toolkit,Perl,Templates,Template Toolkit,嗨,我有这样的xml数据 <university> <name>svu</name> <location>ravru</location> <branch> <electronics> <Section> <student name="xxx" number="1

嗨,我有这样的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>
像这样,我有15所大学,还有一些部门只有两三个学生,有些有10个学生,有些学生只有一个sem,有些有两个学期,像这样

$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'
                                                  }
                                                 ]
                                               }
                                             }
                                          ]
                                         }
                                       };
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 loop for branch elements或任何简单的代码来获取分支元素。因为如果某个部分有60名学生,那么它会在每个部分打印6o。

您上面粘贴的内容在语法上似乎不正确。你在运动吗

不管怎样,读一下。。。。 将结构传递给TT存储后,您可以访问其元素,例如:

[%var1.STC.0.gym.hyd.com(等等)%]


你应该避免太深的结构。

我想你只需要在章节上再加一个
FOREACH
,类似这样:

[%+ university.name +%]
[%+ university.location +%]
[% FOREACH section = university.branch.electronics.section %]
    branch student: [%+ section.name +%]
    [%+ section.number +%]
    [% FOREACH sem = section.sem %]
        [%+ sem.semister +%]
        [%+ sem.subjects +%]
        [%+ sem.rank +%]
    [% END %]
[% END %]

您可能需要添加一个字符串,或者确保所有字符串都正确转义,以便在LaTeX中使用。如果您不关心新行是如何处理的,那么请使用
[%…%]
[%+…+%]
版本保留了前导和尾随空格。

很抱歉,它现在不正常。您可以查看上面解释的我的洞问题。不过,如果你不明白,请问我。请你能告诉我,我如何使用循环内为循环只获取部分信息。嗨,我尝试像你说的那样,但它只提供输出,如果我们有两个或更多的学生在一个部分,而且它只打印一个半年级科目和排名在一个学生。如果一个学生中有两个半分生,则不会打印第二个半分生。@pavani:我想我误解了您的数据结构,请查看我的更新。@pavani:您最好的办法是标准化数据,以便
部分
半分生
大学
,当有多个哈希引用时,可以重复的任何内容都始终表示为数组而不是数组,但当只有一个哈希引用时,则表示为单个哈希引用。您正在使用的XML加载程序应该有一个选项。@pavani:XML::Simple很好,看看这个选项,您也可以使用它。因此,对XML中有时会包含多个项的内容使用
ForceArray
,然后您可以在Perl和TT中始终将它们视为数组。嗨,我使用ForceArray处理重复元素,现在它可以工作并打印我想要的内容。非常感谢您的建议和帮助。