Как исключить родительский элемент на основе дочернего атрибута с помощью XSL? - PullRequest
0 голосов
/ 07 февраля 2011

Я создаю установщик Wix, основанный на наборе автоматически сгенерированных XML-файлов (я использую HEAT для сбора содержимого папки).Мне нужно исключить определенные файлы из результирующего XML, например, из этого фрагмента. Я хочу исключить файл "Web.config":

<Component Id="cmp87E809324190AF5E85315B10C397DB8F" 
           Directory="Content" 
           Guid="{4210C091-E16F-45EA-9005-A7487CF6AC69}">
   <File Id="fil13DABBB8A7FACF8E81FE69FD2464DE48" 
         Source="$(var.ProjectDir)\MyService.svc" />
</Component>
<Component Id="cmp276C007DCB38D3C2E4DA41DFDD8F5CED" 
           Directory="Content" 
           Guid="{A01BE50E-3B00-40EF-96EB-D48AED1F6259}">
   <File Id="fil527A2DD913A88F35BD2B90F10029FB32" 
         Source="$(var.ProjectDir)\Web.config" />
</Component>

Я применяю следующее преобразование:

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

  <!-- exclude files -->
  <xsl:template match="wix:Component/wix:File[
                          @Source='$(var.ProjectDir)\Web.config'
                       ]">
  </xsl:template>

К сожалению, он удаляет только элемент «Файл» (тот, которому он соответствует), я хотел бы удалить родительский элемент («Компонент») для соответствующего подэлемента «Файл».Это должно быть относительно легко в XSLT, но я не понял этого.

Заранее спасибо

1 Ответ

2 голосов
/ 07 февраля 2011

Вы должны использовать:

<!-- exclude files -->
<xsl:template match="
        Component[File/@Source='$(var.ProjectDir)\Web.config']"/>

В вашем примере XML отсутствуют пространства имен, поэтому вы можете добавить их самостоятельно.

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