rhino wrote:
Quote:
>
Given that these are two separate XML files but that there is some common
information, specifically the department number, could I use XSLT to
generate a report that shows me each department name followed by the names
of the people who work in the department? Something like this:
>
Marketing
Department Number: 001
Location: New York
Manager: T. Jones
>
Other Staff
E. Humperdinck
E. Presley
J. Hendrix
>
Information Systems
Department Number: 666
Location: Toronto
Manager: M. Slate
>
Other Staff
F. Flintstone
B. Rubble
J. Rockhead
>
|
Just in case you (or someone else) might be interested in a non-XSLT solution: here a small xgawk script that does the job.
$ cat departments.xml
<?xml version="1.0" encoding="UTF-8"?>
<departments>
<department>
<department_number>001</department_number>
<name>Marketing</name>
<location>New York</location>
<manager>T. Jones</manager>
</department>
<department>
<department_number>666</department_number>
<name>Information Systems</name>
<location>Toronto</location>
<manager>M. Slate</manager>
</department>
</departments>
$ cat employees.xml
<?xml version="1.0" encoding="UTF-8"?>
<employees>
<employee>
<name>E. Humperdinck</name>
<department_number>001</department_number>
</employee>
<employee>
<name>E. Presley</name>
<department_number>001</department_number>
</employee>
<employee>
<name>J. Hendrix</name>
<department_number>001</department_number>
</employee>
<employee>
<name>F. Flintstone</name>
<department_number>666</department_number>
</employee>
<employee>
<name>B. Rubble</name>
<department_number>666</department_number>
</employee>
<employee>
<name>J. Rockhead</name>
<department_number>666</department_number>
</employee>
</employees>
$ cat join.awk
@load xml
XMLSTARTELEM {data = "" ; next}
XMLCHARDATA {data = $0 ; next}
XMLDEPTH == 3 && XMLENDELEM {
a[XMLENDELEM] = data
dept = a["department_number"]
}
NR == FNR && XMLENDELEM == "employee" {
o[dept] = o[dept] sep[dept] " " a["name"]
sep[dept] = "\n"
next
}
XMLENDELEM == "department" {
print a["name"]
print " Department Number: " dept
print " Location: " a["location"]
print " Manager: " a["manager"]
print ORS " Other Staff" ORS o[dept] ORS
}
END {if (XMLERROR) print XMLERROR}
$ xgawk -f join.awk employees.xml departments.xml
Marketing
Department Number: 001
Location: New York
Manager: T. Jones
Other Staff
E. Humperdinck
E. Presley
J. Hendrix
Information Systems
Department Number: 666
Location: Toronto
Manager: M. Slate
Other Staff
F. Flintstone
B. Rubble
J. Rockhead