Это не так просто, как кажется, так как XSLT - не лучший инструмент для разбора строк - но это именно то, что вам нужно для общего получения содержимого атрибута стиля right .
Однако, в зависимости от сложности вашего ввода, может быть достаточно чего-то подобного (хотя я старался быть как можно более универсальным):
<!-- it's a good idea to build most XSLT around the identity template -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:template>
<!-- specific templates over general ones with complex if/choose inside -->
<xsl:template match="span[
contains(translate(@style, ' ', ''), 'font-style:italic')
]">
<xsl:copy>
<xsl:copy-of select="@*" />
<xsl:attribute name="style">
<!-- this is pretty assumptious - might work, might break,
depending on how complex the @style value is -->
<xsl:value-of select="substring-before(@style, 'font-style')" />
<xsl:value-of select="substring-after(@style, 'italic')" />
</xsl:attribute>
<em>
<xsl:apply-templates select="node()" />
</em>
</xsl:copy>
</xsl:template>