Нет, вы не обязаны использовать xsl: element, атрибут use-attribute-sets может появляться в элементах литеральных результатов, если вы поместите его в пространство имен XSLT, поэтому вы можете использовать что-то вроде:
<fo:something xsl:use-attribute-sets="myAttributeSet">
Если вы хотите иметь что-то близкое к функциональности CSS, вы можете добавить другое XSLT-преобразование в конце вашей обработки, которое добавит нужные вам атрибуты. Вы можете начать с рекурсивного преобразования идентификаторов, а затем добавить шаблоны, соответствующие элементам, которые вы хотите изменить, см. Небольшой пример ниже
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:attribute-set name="commonAttributes">
<xsl:attribute name="common">value</xsl:attribute>
</xsl:attribute-set>
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="someElement">
<xsl:copy use-attribute-sets="commonAttributes">
<xsl:attribute name="someAttribute">someValue</xsl:attribute>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>