Try something like this
SELECT coalesce(A.ranking,0) as ranking
(
SELECT coalesce(B.groupName,'') as groupName,
(
SELECT C.policy,
C.groupCount
FROM @temp C
WHERE C.ranking = A.ranking
AND C.groupName = B.groupName
ORDER BY C.groupCount desc, C.policy
FOR XML PATH(''), ELEMENTS, TYPE
) AS groupName
FROM @temp B
WHERE B.ranking = A.ranking
GROUP BY B.groupName
ORDER BY B.groupName
FOR XML PATH(''), ELEMENTS, TYPE
)
FROM @temp A
GROUP BY A.ranking
ORDER BY A.ranking
FOR XML PATH('policyRanking'), ELEMENTS, TYPE, ROOT('ranks')