Extract timestamp from first record in xml file and it checks if not it will replace first record

I have test.xml

<emp><id>101</id><name>AAA</name><date>06/06/14 1811</date></emp> 
<Join><id>101</id><city>london</city><date>06/06/14 2011</date></join> 
<Join><id>101</id><city>new york</city><date>06/06/14 1811</date></join> 
<Join><id>101</id><city>sydney</city><date>06/06/14 0623</date></join> 
<emp><id>102</id><name>BBB</name><date>09/09/14 2001</date></emp> 
<Join><id>102</id><city>new york</city><date>09/09/14 1410</date></join> 
<Join><id>102</id><city>perth</city><date>09/08/14 2001</date></join> 
<Join><id>102</id><city>tulsa</city><date>09/09/14 1919</date></join>

timestamp format : MM/DD/YY HHMM

for example,

Extract 'emp' timestamp for first row (06/06/14 1811) and checks 'join' timestamp rows. if not less equal to another timestamp then replace from 'emp' timestamp into 'join' row

My output.xml should be as,

 <emp><id>101</id><name>AAA</name><date>06/06/14 1811</date></emp> 
 <Join><id>101</id><city>london</city><date>06/06/14 2011</date></join> 
 <Join><id>101</id><city>new york</city><date>06/06/14 1811</date></join> 
 <Join><id>101</id><city>sydney</city><date>06/06/14 1811</date></join> 
 <emp><id>102</id><name>BBB</name><date>09/09/14 2001</date></emp> 
 <Join><id>102</id><city>new york</city><date>09/09/14 2001</date></join> 
 <Join><id>102</id><city>perth</city><date>09/09/14 2001</date></join> 
 <Join><id>102</id><city>tulsa</city><date>09/09/14 2001</date></join> 

this is example I have huge xml file

this is my code

 for i in `cat test.xml` 
 do 
    if [[ "$i" == "<emp>"* ]]  ; then 
    empvar=`echo $i | grep -o -P '(?<=<date>).*(?=</date>)' ` 
    empdate=`date --date="$empvar" +%s` 
    echo $i >> ouput.xml 
    else 
    joinvar=`echo $i | grep -o -P '(?<=<date>).*(?=</date>)'` 
    joindate=`date --date="$joinvar" +%s` 
             if [[ $empdate -le $joindate ]]; then 
            echo $i >> output.xml 
            else 
            echo $i | sed 's#<date>\([^<][^<]*\)</date>#<date>'$empvar'</date>#' >> output.xml 
            fi 
    fi 
 done 

this code is working and it is taking long time to complete so, I need better way to process

Try something like:

awk -F '</?date>' '
#{printf("%s \"%s\"\n", substr($0, 1, 2), $2)}
/^<emp>/ {
	ed = $2
	cd = substr($2, 7, 2) substr($2, 1, 2) substr($2, 4, 2) substr($2, 10)
	print
	next
}
/^<Join>/ {
	if(cd > (substr($2, 7, 2) substr($2, 1, 2) substr($2, 4, 2) substr($2, 10)))
		$0 = $1 "<date>" ed "</date>" $3
}
1' test.xml

If you want to try this on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk , /usr/xpg6/bin/awk , or nawk .

Thanks you so much @Don Cragun, it works perfect!!!!