After some googling and trial&error, XSLT:
$ cat file.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="lowercase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element/@name">
<xsl:attribute name="name">
<xsl:value-of select="translate(., $lowercase, $uppercase)" />
</xsl:attribute>
</xsl:template>
<xsl:template match="product/@id"/>
</xsl:stylesheet>
$ cat file.xml
<root>
<otherelement name="foo" />
<element name="product-info">
<element name="user-info" maxTimes="total-name">
<element maxHelp="user-help">
</element>
</element>
</element>
</root>
$ xsltproc file.xsl file.xml
<?xml version="1.0"?>
<root>
<otherelement name="foo"/>
<element name="PRODUCT-INFO">
<element name="USER-INFO" maxTimes="total-name">
<element maxHelp="user-help">
</element>
</element>
</element>
</root>