The second and third cases amount to the distinction between XML attributes vs XML elements, which has already been answered extensively in the linked question.
Your first case introduces the possibility of not marking up a name into separate first and last names. You ask when you might want to do this. Generally, name data originates in a form where you have first and last name already determined separately. Preserving this distinction makes sense. However, there are some reasons you might want to use a single name field rather than separate first and last names:
- Some people don't have separate first and last names.
- Your data source might not provide separate first and last names, and
parsing a single name into first and last parts can be very difficult.
These reasons generalize to non-name data. You will facilitate downstream processing if your markup is at a finer level of granularity, but it's not always easy to achieve that granularity. There's also a judgement call to be made regarding the likelihood of the need for the greater degree of markup by current and future consuming applications. More markup that's never needed just increases overhead to no purpose.