您如何使用模板工具包
阅读此信息 $var1= {
'STC'=>[
{
'gym'=>{
'hyd'=>{
'com'=>[
'dr'=>'1',
'typ'=>'z',
'bemo'=>{
'bm'=>'1',
'typ'=>'x',
'col'=>'red'
}
}
{
'dr'=>'12',
'typ'=>'a',
'bemo'=>{
'bm'=>'25',
'typ'=>'p',
'col'=>'red'
}
}
{
'dr'=>'23',
'typ'=>'k',
'bemo'=>{
'bm'=>'22',
'typ'=>'w',
'col'=>'blue'
}
}
{
'dr'=>'3',
'typ'=>'s',
'bemo'=>{
'bm'=>'9',
'typ'=>'B',
'col'=>'green'
}
}
}
}
]
};
我无法获得这种类型的复杂数据,保留了我解决的所有内容,我正在按照自己的意愿获得输出,但是这个问题让我很痛苦。请帮助我。
答案 0 :(得分:4)
在不知道XML的样子的情况下,我只能给你一个非常一般的建议。使用XSLT将XML转换为docbook格式。 (对于XSLT,您可以使用Perl模块XML::XSLT或外部XSLT处理器(如xsltproc)。您也可以在没有XSLT的情况下执行此操作,例如using the DOM。
对于docbook,存在用于转到RTF或PDF的工具链。对于RTF,您需要openjade
之类的内容对于PDF,请使用docbook stylesheets转换为FO并使用Apache FOP创建PDF。
后面的大多数步骤都可以使用一些简单的shell脚本完成;如果您愿意,可以使用Perl。
当然,根据您使用的平台(您没有提及),您可以在此处提出许多商业解决方案。例如,这里是a FO-to-RTF converter。
如果您的XML非常简单且只是期望一个非常简单的RTF,您可以通过编写自己的XSLT脚本来完成转换,例如在this example中。
(好吧,那不是Perl,但由于它主要是XSLT,所以你应该很容易移植它。)
答案 1 :(得分:1)
好的,所以你有一些数据,你期望它看起来像什么?听起来很危险,你可以简单地在文本编辑器中打开并打印pdf或保存为rtf。显然这不是你的意思。
您需要以某种方式格式化数据。然后,转换只是将您的数据应用于该格式。
当我提到here时,你可以制作一个LaTeX模板并用你的数据填充它Template::Toolkit
并使用LaTeX编译器进行编译。这会给你一个PDF。
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Fast;
use Template;
my $xml = <<'XML';
<student>
<number>24</number>
<education>bachelors</education>
<specialization>computers </specialization>
-<address>
<house_number="128"/>
<street name="xxxx"/>
<proddutoor/>
<address/>
-<details>
<name="clar"/>
<age="20"/>
<sex="m"/>
</details>
</student>
<student>
<number>23</number>
<education>ph.d.</education>
<specialization>physics </specialization>
-<address>
<house_number="128"/>
<street name="xxxx"/>
<proddutoor/>
<address/>
-<details>
<name="joel"/>
<age="20"/>
<sex="m"/>
</details>
</student>
XML
my $xml_hash = xml2hash $xml;
my $template = Template->new();
my $filename = 'output.tex';
#I think the following is a holdover from a previous version
#as I cannot check right now, I will leave as a comment:
#open my $fh, '>', $filename;
$template->process(\*DATA, $xml_hash, $filename)
|| die "Template process failed: ", $template->error(), "\n";
system( "pdflatex $filename" );
__DATA__
\documentclass{article}
\title{Roster}
\author{pavani}
\begin{document}
\maketitle
[% FOREACH st IN student %]
Student [% st.number %] is a [% st.specialization %] [% st.degree %] student.
[% END %]
\end{document}
N.B。 XML::Fast
甚至可以很好地对付格式不佳的XML:)