1) Un attributo nell'xml senza contenuto non ha senso e di norma si toglie l'attributo.
Codice PHP:
<person name="Pippo" desc="Amico di Topolino"/>
<person name="Pluto" />
2) Nel foglio di stile xsl devi fare dei controlli per verificare se l'elemento ha l'attributo ed in quel caso visuaslizzarlo.
Codice PHP:
<xsl:template match="person">
[img]person.gif[/img]
<xsl:if test="@desc">
<div class="person_desc"><xsl:value-of select="@desc"/></div>
</xsl:if>
</xsl:template>
Non prendo in considerazione toppe (tipo testare se nel template l'attributo è vuoto, e in tal caso scrivere spazi per evitare che il parser lo compressi).
Non sono toppe, lasciare un div vuoto in un documento xhtml <div></div> solo perchè manca il suo contenuto al suo interno indica che stai sbagliando a creare il documento e non ha senso, se quel div ti serve per la formattazione del layout, cambiala.
Se proprio vuoi metterci un div vuoto <div></div> devi crearti uno schema xml da dare in pasto lato server e formattare il documento in uscita.