Finding Duplicates in RESX Using XSLT
Hanselman pointed out to me yesterday that Dan Suceava posted a VS add-in that finds duplicate RESX items by ID and prints out the duplicate names in a report.
Now, I’m all over VS add-ins and adding cool functionality to the development environment, but this feels a lot like overkill to me. I admit I didn’t go download the thing because, as neat as it sounds, it occurs to me that you could just jam a 10 minute XSLT together and find out the answer that way. (And who knows - the add-in may be doing just that.)
So, for those interested, here’s a quick-and-dirty XSLT that will go through a RESX file and print out a list of duplicate resources by ID along with a count of how many were found:
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/root"> <xsl:for-each select="data"> <xsl:variable name="dataName" select="@name" /> <xsl:variable name="currPosition" select="position()" /> <xsl:variable name="numDups" select="count(/root/data[@name = $dataName])" /> <xsl:variable name="numBefore" select="count(/root/data[@name = $dataName and position() < $currPosition]/@name)" /> <xsl:if test="$numDups > 1 and $numBefore = 0"><xsl:value-of select="$dataName" /> (<xsl:value-of select="$numDups" />)
</xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet>
A sample report might look like this:
ResourceID1 (3) ResourceID4 (2) ResourceID7 (4)
Used in conjunction with a command-line tool like nxslt, you’re set - specify your RESX file as the input XML, and the above as the style sheet. Done!