Here's a quick SELECT framework you can use...
Code:
select pa.*
,(select * from Address where AddressID = pa.AddressID for xml path('Address') ,type) -- PA Address
,(select pf.* ,(select * from Address where AddressID = pf.AddressID for xml path('Address') ,type) -- EP Address
from EmployeeProfile pf (nolock)
where pf.PersonID = pa.PersonID
for xml path('EmployeeProfile') ,type
) -- EmployeeProfile
,(select pf.* ,(select * from Address where AddressID = pf.AddressID for xml path('Address') ,type) -- GP Address
from GuestProfile pf (nolock)
where pf.PersonID = pa.PersonID
for xml path('GuestProfile') ,type
) -- GuestProfile
,(select pf.* ,(select * from Address where AddressID = pf.AddressID for xml path('Address') ,type) -- SP Address
from StudentProfile pf (nolock)
where pf.PersonID = pa.PersonID
for xml path('StudentProfile') ,type
) -- StudentProfile
from PersonAccount pa (nolock)
for xml path('PersonAccount') ,root('PersonAccounts') ,type