• See if this gets you close:

    SELECT sp.StudentID AS [@id],

    (

    SELECT 'final' AS type,

    (

    SELECT (

    SELECT 'catalog' AS type,

    CAST(CAST(path.Catalog AS NVARCHAR(40)) AS XML)

    FROM dbo.StudentPrograms path

    WHERE sp.StudentID = path.StudentID

    FOR

    XML AUTO,

    TYPE

    ),

    (

    SELECT 'degree' AS type,

    CAST(RTRIM(path.Degree) AS XML)

    FROM dbo.StudentPrograms path

    WHERE sp.StudentID = path.StudentID

    AND path.Degree != ''

    FOR

    XML AUTO,

    TYPE

    ),

    (

    SELECT 'major' AS type,

    CAST(RTRIM(path.Major) AS XML)

    FROM dbo.StudentPrograms path

    WHERE sp.StudentID = path.StudentID

    AND path.Major != ''

    FOR

    XML AUTO,

    TYPE

    ),

    (

    SELECT 'minor' AS type,

    CAST(RTRIM(path.Minor) AS XML)

    FROM dbo.StudentPrograms path

    WHERE sp.StudentID = path.StudentID

    AND path.Minor != ''

    FOR

    XML AUTO,

    TYPE

    ),

    (

    SELECT 'concentration' AS type,

    CAST(RTRIM(path.Concentration) AS XML)

    FROM dbo.StudentPrograms path

    WHERE sp.StudentID = path.StudentID

    AND path.Concentration != ''

    FOR

    XML AUTO,

    TYPE

    )

    FROM dbo.StudentPrograms sp

    FOR

    XML PATH('student_path'),

    TYPE

    )

    FROM dbo.StudentPrograms educational_goal

    WHERE sp.StudentID = educational_goal.StudentID

    FOR

    XML AUTO,

    TYPE

    )

    FROM dbo.StudentPrograms sp

    FOR XML PATH('student');

    There are no special teachers of virtue, because virtue is taught by the whole community.
    --Plato