I have the following xml file that I need to transform to a tab-delimited flat file:
<?xml version="1.0"?>
<root>
<header>
<driver_id>driver_id_from_
trans</dri
ver_id>
<vehicle_id>vehicle_id_fro
m_trans</v
ehicle_id>
<duty_shift_id>duty_shift_
id_from_tr
ans</duty_
shift_id>
<route_id>route_id_from_tr
ans</route
_id>
<cid_terminal_id>cid_termi
nal_id_fro
m_trans</c
id_termina
l_id>
</header>
<record>
<longitude>-105.111111</lo
ngitude>
<latitude>39.111111</latit
ude>
<date_time>2003/12/10.16:0
8</date_ti
me>
<tag_id>tag_id_from_trans_
1</tag_id>
<stop_location_id>stop_loc
ation_id_f
rom_trans_
1</stop_lo
cation_id>
<fare_type_cd>fare_type_cd
_from_tran
s_1</fare_
type_cd>
<blacklist_cd>blacklist_cd
_from_tran
s_1</black
list_cd>
</record>
<record>
<longitude>-105.222222</lo
ngitude>
<latitude>39.222222</latit
ude>
<date_time>2003/12/10.16:1
8</date_ti
me>
<tag_id>tag_id_from_trans_
4</tag_id>
<stop_location_id>stop_loc
ation_id_f
rom_trans_
4</stop_lo
cation_id>
<fare_type_cd>fare_type_cd
_from_tran
s_4</fare_
type_cd>
<blacklist_cd>blacklist_cd
_from_tran
s_4</black
list_cd>
</record>
</root>
I need to concatenate the <header> fields to the front of each <record> as follows:
driver_id_from_trans vehicle_id_from_trans duty_shift_id_from_trans route_id_from_trans cid_terminal_id_from_trans
-105.111111 39.111111 2003/12/10.16:08 tag_id_from_trans_1 stop_location_id_from_tran
s_1 fare_type_cd_from_trans_1 blacklist_cd_from_trans_1
driver_id_from_trans vehicle_id_from_trans duty_shift_id_from_trans route_id_from_trans cid_terminal_id_from_trans
-105.222222 39.222222 2003/12/10.16:18 tag_id_from_trans_4 stop_location_id_from_tran
s_4 fare_type_cd_from_trans_4 blacklist_cd_from_trans_4
Here is the xsl stylesheet that I hoped would work, but no luck:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="
http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/" >
<xsl:param name="delim" select="'	'"/> <!-- tab -->
<xsl:param name="nl" select="'
'"/> <!-- newline -->
<xsl:for-each select="root/header">
<xsl:value-of select="normalize-space(dr
iver_id)"/
>
<xsl:value-of select="$delim"/>
<xsl:value-of select="normalize-space(ve
hicle_id)"
/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="normalize-space(du
ty_shift_i
d)"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="normalize-space(ro
ute_id)"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="normalize-space(ci
d_terminal
_id)"/>
<xsl:value-of select="$delim"/>
<xsl:for-each select="root/record">
<xsl:value-of select="normalize-space(lo
ngitude)"/
>
<xsl:value-of select="$delim"/>
<xsl:value-of select="normalize-space(la
titude)"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="normalize-space(da
te_time)"/
>
<xsl:value-of select="$delim"/>
<xsl:value-of select="normalize-space(ta
g_id)"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="normalize-space(st
op_locatio
n_id)"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="normalize-space(fa
re_type_cd
)"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="normalize-space(bl
acklist_cd
)"/>
<xsl:value-of select="$delim"/>
<xsl:value-of select="$nl"/> <!-- newline -->
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Can someone tweak this for me to get it to work?
TIA
Start Free Trial