2010-03-19 41 views
3

我有一個由XSLT後處理的HTML頁面(完全有效)。使用XSLT處理HTML頁面並將DIV從一個位置移動到另一個位置

假設的代碼中的相關部分看起來是這樣的:

<div id="content"> ... </div> 
... 
<div id="announcement"> ... </div> 

的XSLT需要改造它看起來像這樣:

<div id="content"> <div id="announcement"> ... </div> ... </div> 

任何想法?我卡住了。

編輯:指示<div id="content"><div id="announcement">由其他代碼分隔。

+0

您的HTML頁面是XHTML頁面嗎? –

+0

它是有效的HTML,所以是的。 –

+0

並非所有有效的HTML都是有效的XHTML。文檔頂部的DTD是什麼? –

回答

2

如果announcement DIV 直接跟隨content格,使用:

<xsl:template match="div[@id='content' and following-sibling::div[1][@id='announcement']"> 
    <!-- copy the content div and its attributes --> 
    <xsl:copy> 
    <xsl:copy-of select="@*" /> 
    <!-- now make a copy of the directly following announcement div --> 
    <xsl:copy-of select="following-sibling::div[1][@id='announcement']" /> 
    <!-- process the rest of the contents --> 
    <xsl:apply-templates /> 
    </xsl:copy> 
</xsl:template> 

<!-- the empty template mutes an announcement div that follows a content div --> 
<xsl:template match="div[@id='announcement' and preceding-sibling::div[1][@id='content']" /> 

以上是不夠具體,不要觸摸任何其他的div可能是在文檔中。如果你的情況允許,你可以使它更簡單/不太具體,以提高可讀性。

+0

不幸的是,它不直接跟隨內容div;然而,它應該總是在相同的地方(相對於內容div)。也許我可以修改你的建議代碼?謝謝! –

+0

@Dave:當然,不應該太難。我提供的代碼採用第一個後​​面的div,如果它有id「公告」。你可以將它反轉爲'following-sibling :: div [@ id ='announcement'] [1]'或者使用'follow ::'軸來查看你的位置。 – Tomalak

相關問題