V XML můžeme u každého elementu použít libovolné množství atributů. K deklaraci atributů slouží klíčové slovo <!ATTLIST ...>. Deklarace každého atributu se skládá ze jména atributu, jeho typu a standardní hodnoty. Pokud bychom chtěli pro element faktura definovat atributy splatnost a vystaveno, použijeme následující jednoduchou deklaraci.
<!ATTLIST faktura splatnost CDATA #IMPLIED vystaveno CDATA #IMPLIED>
Pro název atributu platí stejná omezení jako pro název elementu. Jako typ atributů jsme použili CDATA. Tím jsme řekli, že atribut může obsahovat jako svoji hodnotu libovolný text. Existují i další typy. Častým případem je omezení hodnoty atributu na jednu z předem daných hodnot.
<!ATTLIST odstavec zarovnani (vlevo|vpravo|nastred) #IMPLIED>
Používaný je i typ ID. Pokud má nějaký atribut tento typ, musí být jeho hodnota jednoznačný identifikátor v rámci jednoho dokumentu. K dispozici je pak komplementární typ IDREF. Jako hodnotu atributu s tímto typem můžeme uvést pouze již existující identifikátor. Lze tak vytvářet jednoduché odkazy mezi jednotlivými částmi dokumentu. Existuje ještě několik dalších typů, ale ty se nepoužívají tak často.
Kromě typu musíme u každého atributu určit standardní hodnotu. V našich příkladech jsme používali hodnotu #IMPLIED. V případech, kdy v dokumentu není atribut uveden, si pak aplikace může doplnit jeho hodnotu podle své potřeby. Pokud je zadání atributu povinné, použijeme #REQUIRED. Můžeme rovněž určit přímo hodnotu, která se použije, pokud není v dokumentu zadána.
<!ATTLIST odstavec zarovnani (vlevo|vpravo|nastred) "vlevo">