2010-03-08 95 views
2

如何從這個得到:移動xsl兄弟節點內的父節點?

<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> 

(移動內部<File><TypeLib>小號......)

感謝,

+0

僅供參考:當我在您的問題中格式化代碼時,我發現您在兩個示例中的每個示例中最後一個''標記的'Id'屬性中缺少結尾引號。我糾正了他們。希望這不是你遇到的問題的一部分。 – Asaph 2010-03-08 15:56:59

+0

道歉,不...這是我的草率複製/粘貼/格式努力... – user288929 2010-03-08 17:15:53

回答

2
<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>孩子
  2. 自定義模板處理<File>節點,嵌套以下所有<TypeLib>節點,即讓他們子女<File>
  3. 這調用<TypeLib>節點的身份模板,現在完全複製它們
+0

謝謝,但似乎複製TypeLib的,而不是將它們移動... – user288929 2010-03-09 11:54:23

+0

我測試了它,它產生的確切我在答案中顯示的輸出。您是否使用樣式表進行了測試,或者您是否與現有代碼混合並匹配? – Tomalak 2010-03-09 12:21:17

+0

混搭......事情是,我已經定義了很多其他模板......如果我上傳整個.xsl會有用嗎? – user288929 2010-03-09 17:21:31

相關問題