wix xsl transform для условного удаления компонентов - PullRequest
0 голосов
/ 27 ноября 2018

Я создаю преобразование для утилиты тепла WiX, которое должно подавлять сбор папок, соответствующих определенному имени (.PayloadData) под собираемым деревом.

Я могу легко заставить его подавить каталоги Component elements, но элемент ComponentRef оказывается хитрым.

Папка называется .PayloadData, и это успешно подавляет элементы Directory и Component:

  <xsl:template match="wix:Directory[@Name='.PayloadData']" />
  <xsl:template match="wix:Directory[@Name='.PayloadData']/*" /> 

Я пробовал нечто подобное для элемента ComponentRefно он соответствует всему.

<xsl:template match="wix:ComponentRef[//wix:Directory[@Name='.PayloadData']/wix:Component[@Id=@Id]]">

Я думаю, что @Id может быть неоднозначным в выражении xpath, но я не знаю, как сказать, что атрибут Id ComponentRef пытается соответствовать атрибуту Id компонента.

Вот вход:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <?include $(var.ProjectDir)\..\Common\Common.wxi?>
    <Fragment>
        <DirectoryRef Id="SampleDataDir">
            <Directory Id="dirFD22039A64AC1D31F568C1632B5AF8A3" Name=".PayloadData">
                <Component Id="cmp846A29F6413B27E8777DD68E6026E461" Guid="*">
                    <File Id="fil9227EFCE377E7FEBB63A4BD121F278AE" KeyPath="yes" Source="$(var.SampleDataDir)\.PayloadData\SampleData.xml" />
                </Component>
            </Directory>
            <Directory Id="dirA4E41FB410D214A14F0C8A302E5E70D2" Name="AlternativePBS">
                <Component Id="cmp3E04EEF702FDD121FD225ABF32550EDB" Guid="*">
                    <File Id="filF1367714C6CE3472899C32E78D3D6D0C" KeyPath="yes" Source="$(var.SampleDataDir)\AlternativePBS\01-ADMIN_Update_PBSHierarchy.xml" />
                </Component>
                <Component Id="cmp6732C6415C5574DB586333DE13FAFD1C" Guid="*">
                    <File Id="fil7F1A16AA0DA338664312C832796DD228" KeyPath="yes" Source="$(var.SampleDataDir)\AlternativePBS\02-SCHEMA_Update_PBSHierarchy.xml" />
                </Component>
                <Component Id="cmp01BD73A317794376E5323FA329D1BFEB" Guid="*">
                    <File Id="filFD2213EB9E67560F25B506695650F7B0" KeyPath="yes" Source="$(var.SampleDataDir)\AlternativePBS\ProcedureForAltPBSStructure.doc" />
                </Component>
                <Component Id="cmp1E93AAFF75E01670D20E84280E7B9B5C" Guid="*">
                    <File Id="filC02D64539D33E6B5250C883EFF6357DD" KeyPath="yes" Source="$(var.SampleDataDir)\AlternativePBS\SPFAdapter_PBS.xml" />
                </Component>
                <Component Id="cmp428BA2587DEE28B22239181E175B108B" Guid="*">
                    <File Id="fil8D32FED82C161537AE2432BFA7F89310" KeyPath="yes" Source="$(var.SampleDataDir)\AlternativePBS\UpdatePBSHierarchyGraphDef.xmlldr" />
                </Component>
            </Directory>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="CG_SampleData">
            <ComponentRef Id="cmp846A29F6413B27E8777DD68E6026E461" />
            <ComponentRef Id="cmp3E04EEF702FDD121FD225ABF32550EDB" />
            <ComponentRef Id="cmp6732C6415C5574DB586333DE13FAFD1C" />
            <ComponentRef Id="cmp01BD73A317794376E5323FA329D1BFEB" />
            <ComponentRef Id="cmp1E93AAFF75E01670D20E84280E7B9B5C" />
            <ComponentRef Id="cmp428BA2587DEE28B22239181E175B108B" />
        </ComponentGroup>
    </Fragment>
</Wix>

И это желаемый вывод

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <?include $(var.ProjectDir)\..\Common\Common.wxi?>
    <Fragment>
        <DirectoryRef Id="SampleDataDir">
            <Directory Id="dirA4E41FB410D214A14F0C8A302E5E70D2" Name="AlternativePBS">
                <Component Id="cmp3E04EEF702FDD121FD225ABF32550EDB" Guid="*">
                    <File Id="filF1367714C6CE3472899C32E78D3D6D0C" KeyPath="yes" Source="$(var.SampleDataDir)\AlternativePBS\01-ADMIN_Update_PBSHierarchy.xml" />
                </Component>
                <Component Id="cmp6732C6415C5574DB586333DE13FAFD1C" Guid="*">
                    <File Id="fil7F1A16AA0DA338664312C832796DD228" KeyPath="yes" Source="$(var.SampleDataDir)\AlternativePBS\02-SCHEMA_Update_PBSHierarchy.xml" />
                </Component>
                <Component Id="cmp01BD73A317794376E5323FA329D1BFEB" Guid="*">
                    <File Id="filFD2213EB9E67560F25B506695650F7B0" KeyPath="yes" Source="$(var.SampleDataDir)\AlternativePBS\ProcedureForAltPBSStructure.doc" />
                </Component>
                <Component Id="cmp1E93AAFF75E01670D20E84280E7B9B5C" Guid="*">
                    <File Id="filC02D64539D33E6B5250C883EFF6357DD" KeyPath="yes" Source="$(var.SampleDataDir)\AlternativePBS\SPFAdapter_PBS.xml" />
                </Component>
                <Component Id="cmp428BA2587DEE28B22239181E175B108B" Guid="*">
                    <File Id="fil8D32FED82C161537AE2432BFA7F89310" KeyPath="yes" Source="$(var.SampleDataDir)\AlternativePBS\UpdatePBSHierarchyGraphDef.xmlldr" />
                </Component>
            </Directory>
        </DirectoryRef>
    </Fragment>
    <Fragment>
        <ComponentGroup Id="CG_SampleData">
            <ComponentRef Id="cmp3E04EEF702FDD121FD225ABF32550EDB" />
            <ComponentRef Id="cmp6732C6415C5574DB586333DE13FAFD1C" />
            <ComponentRef Id="cmp01BD73A317794376E5323FA329D1BFEB" />
            <ComponentRef Id="cmp1E93AAFF75E01670D20E84280E7B9B5C" />
            <ComponentRef Id="cmp428BA2587DEE28B22239181E175B108B" />
        </ComponentGroup>
    </Fragment>
</Wix>

Нужно вычеркнуть:

  • Каталог dirFD22039A64AC1D31F568C1632B5AF8A3
  • Component cmp846A29F6413B27E8777DD68E6026E461
  • ComponentRef cmp846A29F6413B27E8777DD68E6026E461

1 Ответ

0 голосов
/ 27 ноября 2018

Спасибо за вашу помощь.Теперь у меня есть ответ.Ключ был ключом (каламбур):

  <xsl:key name="ComponentsToSuppress" match="wix:Component[ancestor::wix:Directory[@Name='.PayloadData']]" use="@Id" />
  <xsl:template match="wix:Directory[@Name='.PayloadData']" />
  <xsl:template match="wix:ComponentRef[key('ComponentsToSuppress', @Id)]" />

Это позволяет мне подавлять Component и ComponentRef элементов, появляющихся в каталоге с именем «.PayloadData», независимо от того, где он появляется (или как часто он появляется).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...