как получить эти элементы с помощью шаблонов инструментов - PullRequest
1 голос
/ 28 октября 2011

Привет, у меня есть такие 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). My XML :: simple output выглядит так10 учеников, у учеников только один сем, у кого два семестра, как этот. Я написал такой шаблон

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.

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Я думаю, вам просто нужно еще 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 %]

Возможно, вы захотите добавить пользовательский фильтр , пользовательский vmethod или плагин , чтобы убедиться, что все ваши строки правильно экранированы для использования в LaTeX. Если вам не важно, как обрабатываются символы новой строки, используйте [% ... %], версия [%+ ... +%] сохраняет начальные и конечные пробелы.

1 голос
/ 28 октября 2011

То, что вы вставили выше, не кажется синтаксически правильным.Вы шутите :)?

В любом случае, прочитайте Введение руководства .... После передачи вашей структуры в тайник TT вы можете получить доступ к ее элементам, например:

[% var1.STC.0.gym.hyd.com (AND SO ON) %]

Вам следует избегать слишком глубоких структур.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...