2017-05-15 31 views
0

某個ID裹節點,我想變換下面的HTML代碼與在同一父

<div id="pg-1"> 
    <div id="pgc-1"> 
     <div class="test">Hello World!</div> 
    </div> 

    <div id="pgc-2"> 
     <div class="test">Hello World!</div> 
    </div> 
</div> 

<div id="pg-2"> 
    <div id="pgc-3"> 
     <div class="test">Hello World!</div> 
    </div> 

    <div id="pgc-4"> 
     <div class="test">Hello World!</div> 
    </div> 
</div> 

這個

<section id="pg-1"> 
    <div class="container"> 
     <div class="row"> 
      <div id="pgc-1"> 
       <div class="test">Hello World!</div> 
      </div> 

      <div id="pgc-2"> 
       <div class="test">Hello World!</div> 
      </div> 
     </div> 
    </div> 
</section> 

<section id="pg-2"> 
    <div class="container"> 
     <div class="row"> 
      <div id="pgc-3"> 
       <div class="test">Hello World!</div> 
      </div> 

      <div id="pgc-4"> 
       <div class="test">Hello World!</div> 
      </div> 
     </div> 
    </div> 
</section> 

我能得到這個XSLT文檔工作:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()" /> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="//div[starts-with(@id, 'pgc-')]">  
     <div class="container"> 
      <div class="row"> 
       <xsl:copy> 
        <xsl:apply-templates select="@*|node()" /> 
       </xsl:copy> 
      </div> 
     </div> 
    </xsl:template> 

    <xsl:template match="//div[starts-with(@id, 'pg-')]"> 
     <section> 
      <xsl:apply-templates select="@*|node()" /> 
     </section> 
    </xsl:template> 
</xsl:stylesheet> 

不幸的是,它不會產生我想要的東西:特別是,它確實包裹了編號爲的元素容器內,但它不會將它們分組爲只有一個父級。這是什麼是正確的輸出,現在(每節):

<section id="pg-1"> 
    <div class="container"> 
     <div class="row"> 
      <div id="pgc-1"> 
       <div class="test">Hello World!</div> 
      </div> 
     </div> 
    </div> 

    <div class="container"> 
     <div class="row"> 
      <div id="pgc-2"> 
       <div class="test">Hello World!</div> 
      </div> 
     </div> 
    </div> 
</section> 

由於我願做一個總結:

  • 改變所有元素的標籤名與id屬性開始pg-section(我應該複製的所有屬性的新元素)
  • 包裝所有的子元素,其分度id屬性與pgc-開始在同一父節點下.container > .row(我的所有屬性複製到新的ELEM ENT)
+0

您顯示的輸出格式不正確(「節」沒有結束標記)。 –

+0

你是對的,但它只是一個錯字 – Stefano

回答

1

我猜*您想要做的事,如:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 
<xsl:strip-space elements="*"/> 

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

<xsl:template match="div[starts-with(@id, 'pg-')]"> 
    <section> 
     <xsl:copy-of select="@*"/> 
     <div class="container"> 
      <div class="row"> 
       <xsl:apply-templates /> 
      </div> 
     </div> 
    </section> 
</xsl:template> 

</xsl:stylesheet> 

-
(*)由於只有一個(有瑕疵),例如,無規定,所有人都可以做的就是猜測。

+0

我不完全理解你的要求。爲什麼上述不適合你? –

+0

它可以工作,但它不會將具有id'pg-'的元素的所有屬性複製到新的'section'元素上。它只複製'id'屬性 – Stefano

+0

@Stefano現在怎麼樣? –