2016-06-24 15 views
0

Ich habe das folgende Snippet eines. WXS (IDS ausgelassen) von WiX Ernte ausgegeben.Wix Heat Ernte: Entfernen von Verzeichnissen mit gefilterten Komponenten mit Transformation

 <Directory Id="" Name="tr"> 
      <Component Id="" Guid="*"> 
       <File Id="" KeyPath="yes" Source="$(var.SourceDir)\tr\ZedGraph.resources.dll" /> 
      </Component> 
     </Directory> 
     <Directory Id="" Name="zh-cn"> 
      <Component Id="" Guid="*"> 
       <File Id="" KeyPath="yes" Source="$(var.SourceDir)\zh-cn\ZedGraph.resources.dll" /> 
      </Component> 
     </Directory> 
     <Directory Id="" Name="zh-tw"> 
      <Component Id="" Guid="*"> 
       <File Id="" KeyPath="yes" Source="$(var.SourceDir)\zh-tw\ZedGraph.resources.dll" /> 
      </Component> 
     </Directory> 
    </DirectoryRef> 

Und die folgende Umwandlung wird die Komponenten entfernen, aber die leeren Verzeichniselemente verlassen. Wie kann ich sie auch entfernen? Vorausgesetzt, ich möchte nicht alle Verzeichniselemente ausblenden. Im Idealfall möchte ich sie anhand der ID der Komponente abgleichen, die von der Suche zurückgegeben wird.

<xsl:key name="zedResource-search" match="wix:Component[contains(wix:File/@Source, 'ZedGraph.resources.dll')]" use="@Id" /> 
<xsl:template match="wix:Component[key('zedResource-search', @Id)]" /> 
<xsl:template match="wix:ComponentRef[key('zedResource-search', @Id)]" /> 

This question ist ähnlich, verwendet aber die Verzeichnisnamen, die ich für jede dieser Zugabe eine Suche vermeiden möchte, weil es schon ein paar Sprachvarianten sind.

+0

Abgesehen von möglichen Verwirrungen für menschliche Leser, "leere" Directory-Objekte nichts tun. (Mit leer, ich meine, sie sind am Ende die Eltern von 0 Komponenten, die weit über die XML-Element-Struktur geht.) –

+0

Danke für die Informationen. Diese Verwirrung möchte ich vermeiden. – ProdigousRanger

Antwort

1

Eine Möglichkeit hierzu ist die Verwendung einer separaten Vorlage, die dem Element Directory entspricht, in dem alle untergeordneten Elemente Component im Schlüssel enthalten sind. Sie tun, um diesen Vergleich mit einem count

<xsl:template match="wix:Directory[count(wix:Component) 
            = count(wix:Component[key('zedResource-search', @Id)])]" /> 

Alternativ können Sie sagen, Sie Directory entfernen möchten, wenn diese nicht eine Component ref, die nicht im Schlüssel sind (also ein doppelt negativ)

<xsl:template match="wix:Directory[not(wix:Component[not(key('zedResource-search', @Id))])]" /> 
+0

Beide funktionieren und erfüllen die Kriterien, Verzeichnisse nicht zu entfernen, wenn ihnen andere Dateien hinzugefügt werden. Vielen Dank, das hat mir viel Zeit gespart. – ProdigousRanger