not sure what your actual (presumably complex) code is, and thus this is probably no help, or you've already considered it
With cte([Question/@answer], [Question]) as
(select 42, 'Deep Thought')
select cte.* from cte
for xml path('')
Doesn't help with "so I don't have to repeat 'Question' for each attribute" unless moving it to the CTE definition makes whatever you are attempting more easily coded.
Yup! The actual code has many attributes and one piece of text. So whether I do it your way or mine, I still wind up repeating ''Question" many times. That's what I'm looking to avoid.