Their are some default template built into XSLT, which will always output text inside elements unless you tell it not to.
To do this you can either change your apply-templates so that it selects only those elements you want to output, or write a template to match the elements you don't want to output telling it to do nothing.
Also, you have incorrectly highlighted the two numbers that are output. The first on is the value of the catalog/id element, then second is the value of the work/id element. By default attribute values are not output.
Code:
<xsl:template match="id"><!-- will match both catalog/id and work/id - do nothing --></xsl:template>