如何使两个模板在同一个 XSLT 文件中工作?
源 XML
<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="WixSlave.Binaries">
<Component Id="cmpA1D1BF677641BE2AE700859D8256B0FC" Guid="{B0BF9CBD-8A5D-43C1-B9DE-0A1B5A6BD1DE}">
<File Id="filC2827DDF7874712A62423151FBE8CE34" Source="$(var.WixSlave.TargetDir)\WixSlave.exe" />
</Component>
<Component Id="cmpBC6AB890535757A915C99A10445CC74E" Guid="{8726FF82-808A-4736-AD0A-C804A34E494B}">
<File Id="fil7BD5BE5CD71AC92FF47D1D51A99FEE05" Source="$(var.WixSlave.TargetDir)\WixSlave.exe.config" />
</Component>
</DirectoryRef>
</Fragment>
<Fragment>
<ComponentGroup Id="WixSlave.Binaries">
<ComponentRef Id="cmpA1D1BF677641BE2AE700859D8256B0FC" />
<ComponentRef Id="cmpBC6AB890535757A915C99A10445CC74E" />
</ComponentGroup>
</Fragment>
</Wix>
只有文件夹模板产生所需的输出,注册表模板“忽略”
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:wix="http://schemas.microsoft.com/wix/2006/wi" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- 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>
<!-- Folder Template -->
<xsl:template match="wix:Wix/wix:Fragment/wix:DirectoryRef">
<DirectoryRef Id="TARGETFOLDER">
<xsl:copy-of select="*"/>
</DirectoryRef>
</xsl:template>
<!-- Registry Template -->
<xsl:template match="wix:Wix/wix:Fragment/wix:DirectoryRef/wix:Component">
<Component>
<xsl:apply-templates select="@*|*"/>
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name="toBeVariableKey" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</xsl:template>
</xsl:stylesheet>
注册表模板可以在没有文件夹模板的情况下正常工作
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:wix="http://schemas.microsoft.com/wix/2006/wi" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- 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>
<!-- Registry Template -->
<xsl:template match="wix:Wix/wix:Fragment/wix:DirectoryRef/wix:Component">
<Component>
<xsl:apply-templates select="@*|*"/>
<RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Name="toBeVariableKey" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</xsl:template>
</xsl:stylesheet>