Multi Instance =“是”xsl变换为热量

时间:2013-10-24 15:11:20

标签: xslt wix heat

我的问题是heat.exe没有命令行开关将“MultiInstance”属性设置为“yes”(甚至用于设置任意属性)。似乎我唯一的办法是为-t开关提供变换xslt。有没有人已经有一个xslt,它将在所有收获的输出组件元素上包含MultiInstance="yes"属性?

如果我没有得到任何答案,我将自己创作一个,并将其作为这个问题的答案发布。

2 个答案:

答案 0 :(得分:2)

这个怎么样?我基本上是从第二个线程复制它并修改了几个字符:

<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:msxsl="urn:schemas-microsoft-com:xslt"
            exclude-result-prefixes="msxsl"
            xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
            xmlns:my="my:my">

    <xsl:output method="xml" indent="yes" />

    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match='wix:Component'>
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:attribute name="MultiInstance">
                <xsl:text>yes</xsl:text>
            </xsl:attribute>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

请注意,您可能需要稍微调整一下,具体取决于您当前用于生成wix文件的热量参数。

或者,您可以下载WiX热源并自行添加参数。理论上应该很容易。

WiX Installer: using xslt with heat.exe to update attributes

答案 1 :(得分:1)

只需在此处共享我的文件,上面提供的文件可能会对文件节点产生一些问题。

<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:msxsl="urn:schemas-microsoft-com:xslt"
            exclude-result-prefixes="msxsl"
            xmlns:wix="http://schemas.microsoft.com/wix/2006/wi"
            xmlns:my="my:my">

    <xsl:output method="xml" indent="yes" />

    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match='wix:Component'>
        <xsl:copy use-attribute-sets='MultiInstanceSet'>
            <xsl:apply-templates select="@*|node()"/>

        </xsl:copy>
    </xsl:template>
    <xsl:attribute-set name="MultiInstanceSet">
      <xsl:attribute name="MultiInstance">yes</xsl:attribute>
    </xsl:attribute-set>

</xsl:stylesheet>