переместить узел родителя xsl внутри родителя? - PullRequest
2 голосов
/ 08 марта 2010

Как я могу получить от этого:

<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Component Feature="toplevel">
        <File Id="fil8A88F8B155E29670FCA1B83F0E99E635" />
        <TypeLib Id="{DC88F377-25DD-49C8-99D9-1FD8AE484362}" >
            <Interface Id="{5D12ED70-0B5A-49C4-A8A3-FC4C209295BA}" />
            <Interface Id="{73E8EDB7-4293-496D-8ABD-F973F002A033}" />
        </TypeLib>
        <TypeLib Id="{F3C9A192-17C2-4E25-ADB9-89FFEEC0403E}">
            <Interface Id="{89FF44C6-979D-49B6-AF56-EC9509001DE4}" />
        </TypeLib>
    </Component>
</Include>

к этому:

<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Component Feature="toplevel">
        <File Id="fil8A88F8B155E29670FCA1B83F0E99E635" >
            <TypeLib Id="{DC88F377-25DD-49C8-99D9-1FD8AE484362}" >
                <Interface Id="{5D12ED70-0B5A-49C4-A8A3-FC4C209295BA}" />
                <Interface Id="{73E8EDB7-4293-496D-8ABD-F973F002A033}" />
            </TypeLib>
            <TypeLib Id="{F3C9A192-17C2-4E25-ADB9-89FFEEC0403E}">
                <Interface Id="{89FF44C6-979D-49B6-AF56-EC9509001DE4}" />
            </TypeLib>
        </File>
    </Component>
</Include>

(ход <TypeLib> с <File> ...)

Спасибо

1 Ответ

2 голосов
/ 08 марта 2010
<xsl:stylesheet 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:wi="http://schemas.microsoft.com/wix/2006/wi"
>
  <xsl:template match="node() | @*">
    <xsl:copy>
      <xsl:apply-templates select="node()[not(self::wi:TypeLib)] | @*" />
    </xsl:copy>
  </xsl:template>

  <xsl:template match="wi:File">
    <xsl:copy>
      <xsl:apply-templates select="node() | @* | following-sibling::wi:TypeLib" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>

Результат:

<Include xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Component Feature="toplevel">
    <File Id="fil8A88F8B155E29670FCA1B83F0E99E635">
      <TypeLib Id="{DC88F377-25DD-49C8-99D9-1FD8AE484362}">
        <Interface Id="{5D12ED70-0B5A-49C4-A8A3-FC4C209295BA}"></Interface>
        <Interface Id="{73E8EDB7-4293-496D-8ABD-F973F002A033}"></Interface>
      </TypeLib>
      <TypeLib Id="{F3C9A192-17C2-4E25-ADB9-89FFEEC0403E}">
        <Interface Id="{89FF44C6-979D-49B6-AF56-EC9509001DE4}"></Interface>
      </TypeLib>
    </File>
  </Component>
</Include>

Это работает так:

  1. шаблон идентификации (первый) явно исключает <TypeLib> children
  2. пользовательский шаблон обрабатывает <File> узлы, вкладывая все следующие <TypeLib> узлы, то есть делая их дочерними элементами <File>
  3. это вызывает шаблон идентификации для <TypeLib> узлов, который теперь отлично копирует их
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...