2

xslt を使用して、wix で生成された .wxs ファイルを編集heatしたい

これは components_en_us.wxs です

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
        <Fragment>
            <DirectoryRef Id="CLASSES">
                <Directory Id="dirAB609E465A12655D740B32B2BA26C468" Name="alfresco">
                <Directory Id="dir68A1A3CC25353B021B1D7D979B520AF0" Name="extension">
                    <Component Id="cmp0FAE663628DD6BAE53501BB26264259B" Guid="1CBE6568-96E5-4844-BF02-99AF0DE1719D">
                        <File Id="fil867FDB2D2761B5912BA54F92F5E928D1" KeyPath="yes" Source="SourceDir\alfresco\extension\web-client-config-custom.xml" />
                    </Component>
                </Directory>
                </Directory>
            </DirectoryRef>
    </Fragment>
</Wix>

しかし問題は、他の .wxs ファイル (他の言語の場合は components_xx_yy.wxs) があり、コンポーネント/ファイル ID が同じであることです。このメソッドを使用してコンパイルすると、エラーが発生します

error LGHT0091 : Duplicate symbol 'Component:cmp0FAE663628DD6BAE53501BB26264259B' found. 
This typically me ans that an Id is duplicated. Check to make sure all your identifiers 
of a given type (File, Component, Feature) are unique.

グーグルで調べたところ、xslt を使用して components_en_us.wxs のコンポーネント/ファイル ID を変更できることがわかりました。

だから、私は次のようなものを期待しています

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <DirectoryRef Id="CLASSES">
            <Directory Id="dirAB609E465A12655D740B32B2BA26C468" Name="alfresco">
            <Directory Id="dir68A1A3CC25353B021B1D7D979B520AF0" Name="extension">
                <Component Id="en_US_cmp0FAE663628DD6BAE53501BB26264259B" Guid="1CBE6568-96E5-4844-BF02-99AF0DE1719D">
                    <File Id="fil867FDB2D2761B5912BA54F92F5E928D1" KeyPath="yes" Source="SourceDir\alfresco\extension\web-client-config-custom.xml" />
                </Component>
            </Directory>
            </Directory>
        </DirectoryRef>
    </Fragment>
</Wix>

現在、別の質問からこの xslt がありますが、希望どおりに実装する方法がわかりません。

<?xml version="1.0" encoding="utf-8"?>
<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:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

ですから、私の理解が間違っている場合は修正してください.xsltについても助けてください

前もって感謝します

編集:この方法はベストプラクティスですか、またはこの重複エラーを解決するために何か他のことをする必要があります.

4

1 に答える 1

5

これら 2 つの XML リスト間で唯一見つけられる変更点は、コンポーネント ID の前に「en_US_」が追加されていることです。それで全部ですか?その場合は、このテンプレートを現在の XSLT ファイルに追加してみてください。

<xsl:template match="wix:Component/@Id">
   <xsl:attribute name="{name()}">
     <xsl:value-of select="concat('en_US_', .)" />
   </xsl:attribute>
</xsl:template>
于 2013-01-21T10:28:04.710 に答える