你只需要读入这两个文件,根据这两个文件的内容生成 hash 结构,然后交给 XML::Simple 的 XMLout 来帮你生成最终的 XML
文件,或者你手工生成也可以(没 XML::Simple 方便),比如根据你的例子,我可以给出这样的例子:
use XML::Simple;
my $hashref = {
Group => {
ID => "U",
TYPE => "ROOT",
SchoolRef => [ { ID => "SCHOOL01" }, { ID => "SCHOOL02" }, { ID =>
"SCHOOL03" } ],
},
};
$xml = XMLout($hashref, RootName => undef);
print $xml;
结果输出的是:
<Group ID="U" TYPE="ROOT">
<SchoolRef ID="SCHOOL01" />
<SchoolRef ID="SCHOOL02" />
<SchoolRef ID="SCHOOL03" />
</Group>
你可以将 file1.csv 的内容当作一棵树,然后写代码构造上面例子中的 hashref 就好了。
2011/5/18 许高飞 <[email protected]>
> 大家好!
>
> 遇到一个头疼的问题,特来请教大家。
> file1.txt表示一个大学U的院系班级层次结构,
> U下面有SCHOOL01等院,院下面有系,系下面是班级(也有一些班级的上一级就直接是院);
> file2.txt是学生的学号、姓名、班级、成绩。
> 需要从这两个文件读取信息,并输出成XML文件。
>
> file1.csv:
> ID,PARENTID
> U,ROOT
> SCHOOL01,U
> SCHOOL02,U
> SCHOOL03,U
> DEPT01,SCHOOL01
> CLASS01,DEPT01
> CLASS02,DEPT01
> CLASS03,DEPT01
> DEPT02,SCHOOL02,
> CLASS04,DEPT02
> DEPT03,SCHOOL02
> CLASS05,DEPT03
> DEPT04,SCHOOL02
> CLASS06,DEPT04
> CLASS07,SCHOOL03
> ……
>
> file2.csv:
> ID,NAME,CLASS,GPA
> pb001,Mike,CLASS01,3.70
> pb002,Jim,CLASS01,3.92
> pb003,Lisa,CLASS02,3.88
> pb004,Look,CLASS03,4.05
> ……
>
> file1.txt表示一个大学U的院系班级层次结构,
> U下面有SCHOOL01等院,院下面有系,系下面是班级(也有一些班级的上一级就直接是院);
> file2.txt是学生的学号、姓名、班级、成绩。
> 需要从这两个文件读取信息,并输出成类似下面这样的XML文件格式:
>
> <Group ID="U" TYPE="ROOT">
> <SchoolRef ID="SCHOOL01"/>
> <SchoolRef ID="SCHOOL02"/>
> <SchoolRef ID="SCHOOL03"/>
> ……
> </Group>
>
> <Group ID="SCHOOL01" TYPE="SCHOOL">
> <DeptRef ID="DEPT01"/>
> </Group>
>
> <Group ID="DEPT01" TYPE="DEPT">
> <ClassRef ID="CLASS01"/>
> </Group>
>
> <Group ID="SCHOOL03" TYPE="SCHOOL">
> <ClassRef ID="CLASS07"/>
> </Group>
>
> <Group ID="CLASS01" TYPE="CLASS">
> <student ID="pb001" NAME="Mike" GPA="3.70"/>
> <student ID="pb002" NAME="Jim" GPA="3.92"/>
> </Group>
>
> <Group ID="CLASS02" TYPE="CLASS">
> <student ID="pb003" NAME="Lisa" GPA="3.88"/>
> </Group>
>
> <Group ID="CLASS03" TYPE="CLASS">
> <student ID="pb004" NAME="Look" GPA="4.05"/>
> </Group>
> ……
>
> 对XML处理不熟悉,看了一下XML::Simple的用法,看得头大还是没想明白我这个问题要怎么处理?故来请教一下大家,先谢谢了。
>
>
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
> 要向此网上论坛发帖,请发送电子邮件至 [email protected]。
> 要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
> 若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
>
--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 [email protected]。
要取消订阅此网上论坛,请发送电子邮件至 [email protected]。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。