2011年5月17日星期二

Re: [PerlChina] 请教一个XML处理相关的问题

你只需要读入这两个文件,根据这两个文件的内容生成 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 许高飞 <flyhighxu@gmail.com>
大家好!

遇到一个头疼的问题,特来请教大家。
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 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

--
您收到此邮件是因为您订阅了 Google 网上论坛的"PerlChina Mongers 讨论组"论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: