当前位置: 首页 > 知识库问答 >
问题:

Wix安装程序:如何将属性节点添加到中的元素。使用xslt的wxs文件[重复]

薛淳
2023-03-14

我正在尝试向每个

这是我当前的. wxs文档。

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="gamefolder">
            <Directory Id="dirF711F97310B8A07830DC0D0162651C53" Name="Binaries">
                <Directory Id="dir6680B101073A3BBEE0196B38B72D6ACF" Name="Win64">
                    <Component Id="cmpE50AA454EF4441084B9D3A91EBCDEB66" Guid="*">
                        <File Id="fil64DFAE28B352BA139C0419EA1DCA51AF" KeyPath="yes" Source="$(var.HarvestPath1)\Binaries\Win64\game.exe" />
                    </Component>
                    <Component Id="cmp1E519BFC50337D4D04783020429A732A" Guid="*">
                        <File Id="filB5DEFA58FD85ED12A275C6E38E86E1B5" KeyPath="yes" Source="$(var.HarvestPath1)\Binaries\Win64\game.pdb" />
                    </Component>
                    <Component Id="cmp73737DFB25572225F51408CA794B189B" Guid="*">
                        <File Id="fil9A8FF16C3162A983C3BE9966F4D729BE" KeyPath="yes" Source="$(var.HarvestPath1)\Binaries\Win64\mydll.dll" />
                    </Component>
                    <Component Id="cmp27FB4DBD5C6B91D53682E31F9F252271" Guid="*">
                        <File Id="fil8F6BD7CF55FB9B153E3CBF0D64EEA1D6" KeyPath="yes" Source="$(var.HarvestPath1)\Binaries\Win64\mydll2.dll" />
                    </Component>
                </Directory>
            </Directory>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="GeneratedGameFiles1">
            <ComponentRef Id="cmpE50AA454EF4441084B9D3A91EBCDEB66" />
            <ComponentRef Id="cmp1E519BFC50337D4D04783020429A732A" />
            <ComponentRef Id="cmp73737DFB25572225F51408CA794B189B" />
            <ComponentRef Id="cmp27FB4DBD5C6B91D53682E31F9F252271" />
        </ComponentGroup>
    </Fragment>
</Wix>

运行以下xslt it后,它根本不会改变任何东西。

<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">

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

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

    <xsl:template match='Component/File'>
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:attribute name="DiskId">
                <xsl:text>2</xsl:text>
            </xsl:attribute>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
    
</xsl:stylesheet>

这就是我试图得到的结果。

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="gamefolder">
            <Directory Id="dirF711F97310B8A07830DC0D0162651C53" Name="Binaries">
                <Directory Id="dir6680B101073A3BBEE0196B38B72D6ACF" Name="Win64">
                    <Component Id="cmpE50AA454EF4441084B9D3A91EBCDEB66" Guid="*">
                        <File DiskId="2" Id="fil64DFAE28B352BA139C0419EA1DCA51AF" KeyPath="yes" Source="$(var.HarvestPath1)\Binaries\Win64\game.exe" />
                    </Component>
                    <Component Id="cmp1E519BFC50337D4D04783020429A732A" Guid="*">
                        <File DiskId="2" Id="filB5DEFA58FD85ED12A275C6E38E86E1B5" KeyPath="yes" Source="$(var.HarvestPath1)\Binaries\Win64\game.pdb" />
                    </Component>
                    <Component Id="cmp73737DFB25572225F51408CA794B189B" Guid="*">
                        <File DiskId="2" Id="fil9A8FF16C3162A983C3BE9966F4D729BE" KeyPath="yes" Source="$(var.HarvestPath1)\Binaries\Win64\mydll.dll" />
                    </Component>
                    <Component Id="cmp27FB4DBD5C6B91D53682E31F9F252271" Guid="*">
                        <File DiskId="2" Id="fil8F6BD7CF55FB9B153E3CBF0D64EEA1D6" KeyPath="yes" Source="$(var.HarvestPath1)\Binaries\Win64\mydll2.dll" />
                    </Component>
                </Directory>
            </Directory>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="GeneratedGameFiles1">
            <ComponentRef Id="cmpE50AA454EF4441084B9D3A91EBCDEB66" />
            <ComponentRef Id="cmp1E519BFC50337D4D04783020429A732A" />
            <ComponentRef Id="cmp73737DFB25572225F51408CA794B189B" />
            <ComponentRef Id="cmp27FB4DBD5C6B91D53682E31F9F252271" />
        </ComponentGroup>
    </Fragment>
</Wix>

我在这里做错了什么?


共有1个答案

丌官晔
2023-03-14

更改:

<xsl:template match='Component/File'>

到:

<xsl:template match='wix:Component/wix:File'>
 类似资料:
  • 我试图添加一个属性到一个节点,它是CDATA的一部分。我的XML是 结果应该是xml 文档节点中的id属性应作为属性添加到CDATA中的节点。 我能够以字段[@name='CDATA']的形式获取CDATA值,但我不确定如何将文档的属性添加到CDATA中。。 谁能给我建议一下怎么做,或者给我指出正确的方向?

  • 我有一个XML: 我想向根元素:/doc添加一个属性(名称空间),以便输出如下所示: 我尝试了三种xslt(跳过了默认的“复制所有”部分以减少问题的长度)。 xslt1:见下文,问题在于将空名称空间xmlns=”“添加到/doc的所有子节点(即:/doc/tag1和/doc/tag2) Xslt2:见下文,问题是“ns”被添加到根节点:和 xslt3:请参见下文,问题是报告了错误:未定义名称空间前

  • 我将ExtendedXmlSerializer与C结合使用,一个已知的限制是添加对象的序列化列表。当这样做时,它会产生一个单独的元素(列表本身),其中包含列表中的项目。由于我正在反序列化来自一个单独应用程序的外部xml,我无法控制xml的布局,因此需要在用C#反序列化xml之前对其进行转换。 我在stackoverflow的其他地方找到的转换在将一种类型的元素添加到一个新的(不存在的)元素中时效果

  • 我有以下需要转换的XML,如下面给出的“预期输出”部分所示。 改造的要求是: 兄弟节点(如从属节点和位置)需要附加相应的位置ID。。例如如果文件中存在多个从属节点,则节点应显示为等 示例XML输入文件 预期产量

  • 我试图从另一个模板“xsl:template match=“KTheme”模板中向“xsl:element name=“div”元素添加一个属性,但是我得到了一个XSLT错误,没有关于失败原因或失败原因的错误信息。有没有办法做到这一点? 基本上,当从“xsl:template name=“DisplayFrame”模板执行“xsl:apply templates/”行时,它与“KTheme”元素匹

  • 我正在将XML导入Access数据库。在转换过程中,数据之间的所有关系都会丢失。使用XSLT,我通过子节点将ID永久化。使用它,其中Id是添加到子节点的父元素: 我使用这种方法遇到的问题是父节点之外还有其他元素也具有元素或其变体,例如或类似的东西。当我尝试在上面的代码之外使用它时,的一些实例在以前的节点中丢失了。 很抱歉,我不知道在这里使用合适的语言,因为我对XSLT/XML不太熟悉。。。但我试图