我正在构建一个基于一组自动生成的XML文件的Wix安装程序(我使用HEAT来获取文件夹内容)。我需要从生成的XML中排除某些文件,例如,从这个片段我要排除文件“Web.config”:
<Component Id="cmp87E809324190AF5E85315B10C397DB8F"
Directory="Content"
Guid="{4210C091-E16F-45EA-9005-A7487CF6AC69}">
<File Id="fil13DABBB8A7FACF8E81FE69FD2464DE48"
Source="$(var.ProjectDir)\MyService.svc" />
</Component>
<Component Id="cmp276C007DCB38D3C2E4DA41DFDD8F5CED"
Directory="Content"
Guid="{A01BE50E-3B00-40EF-96EB-D48AED1F6259}">
<File Id="fil527A2DD913A88F35BD2B90F10029FB32"
Source="$(var.ProjectDir)\Web.config" />
</Component>
我应用以下转换:
<!-- Identity template -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()" />
</xsl:copy>
</xsl:template>
<!-- exclude files -->
<xsl:template match="wix:Component/wix:File[
@Source='$(var.ProjectDir)\Web.config'
]">
</xsl:template>
不幸的是它只删除了“File”元素(它匹配的元素),我想删除匹配的“File”子元素的父元素(“Component”)。在XSLT中这一定相对容易,但我还没弄明白。
提前致谢
答案 0 :(得分:2)
您应该使用:
<!-- exclude files -->
<xsl:template match="
Component[File/@Source='$(var.ProjectDir)\Web.config']"/>
示例XML中缺少命名空间,因此您可以自己添加它们。