I'm using heat to try and harvest a directory of all the pdb files. I know that 
there is an option for heat to look into the vcproj files to get them, but I 
may need to expand this in the future to deal with other file types as well, 
such as linker map files, and the like.

What I've got so far is an xslt transform that filters out all whitespace and 
files except for the pdb files, but it also leaves behind empty directories:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
    xmlns="http://schemas.microsoft.com/wix/2006/wi";
    xmlns:wix="http://schemas.microsoft.com/wix/2006/wi";>

     <!-- strip all extraneous whitespace -->
     <xsl:strip-space  elements="*"/>

     <!-- Copy all attributes and elements to the output. -->
    <xsl:template match="@*|*">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:apply-templates select="*" />
        </xsl:copy>
    </xsl:template>

     <!-- Exclude all File elements that are not a .pdb file -->
     <xsl:template match="wix:Component[not(contains(wix:File/@Source, 
'.pdb'))]" />

     <!-- Exclude all Directory elements that are svn folders -->
     <xsl:template match="wix:Directory[@Name='.svn']" />
</xsl:stylesheet>


I've tried several different ways (found mainly from google, and messing around 
with xslt) of trying to recursively filter out the empty directories (and then 
their parent directories which will be empty, etc, etc), but I haven't been 
successful.

I'm a beginner to xslt, and to be honest, I didn't think this would be so hard, 
and suspect it shouldn't be, I'm probably just not thinking in the right way.

These are the things I've tried so far:

<!-- Exclude all Directory elements that are not an ancestory of a .pdb file -->
<xsl:template match="wix:Directory/wix:Component[not(contains(wix:File/@Source, 
'.pdb'))]" />

<xsl:template match="wix:Directory">
     <xsl:if test="not(count(//wix:Component) = 0)">
           <xsl:copy>
                <xsl:apply-templates select="@*|node()" />
           </xsl:copy>
     </xsl:if>
</xsl:template>

<xsl:template match="/">
     <xsl:apply-templates select="//wix:Component[not(wix:Component)]"/>
</xsl:template>

<xsl:template match="wix:File">
     <xsl:apply-templates select="ancestor::wix:File[1]"/>
</xsl:template>

Not all at once of course, one by one.

And I'm all out of ideas. I've taken a look at an XML book as well, with a 
section on XSLT, but that didn't help very much.

The whole point of this is that when we build and create the msi of our 
product, to take all the pdb files (built in release, perhaps linker map files 
as well) and bundle them into another msi so we can install them alongside our 
product for when we need to do debugging on a particular machine. Only for 
development purposes of course, we would never distribute this to a customer! 
And I don't actually know if it's possible to install 2 separate projects to 
the same folder, or maybe I can set them up as separate features (main product 
and debug symbols), and have 2 msi files, one for each feature?

Anyway, regardless of the crazy stuff I intend to do for debugging purposes, I 
figured this would be a good excuse to get a little familiar with xslt.

Hopefully someone is able to make sense of what I'm trying to do :)
------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to