2010-03-19 5 views
3

XSLT에서 후 처리하는 HTML 페이지가 있습니다. XSLT는 변환 할 필요가XSLT를 사용하여 HTML 페이지를 처리하고 DIV를 한 위치에서 다른 위치로 이동

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

는 다음과 같이보고 :

는의 코드 관련 부분은 다음과 같습니다 가정 해 봅시다

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

어떤 아이디어? 나는 붙어있다.

편집 : <div id="content"><div id="announcement">이 다른 코드로 구분되어 있음을 나타냅니다. announcement DIV 직접content DIV, 사용을 따르는 경우

+0

HTML 페이지가 XHTML 페이지입니까? –

+0

유효한 HTML이므로 예. –

+0

모든 유효한 HTML이 유효한 XHTML이 아닙니다. DTD는 문서 상단에 무엇입니까? –

답변

2

는 :

<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 바로 뒤에 있지 않습니다. 그러나 항상 같은 위치에 있어야합니다 (content div에 상대적 임). 아마도 제안 된 코드를 수정할 수 있습니까? 고맙습니다! –

+0

@Dave : 물론, 너무 열심히해서는 안됩니다. id가 "announcement"이면 첫 번째 div 뒤에 오는 코드를 사용합니다. 'following-sibling :: div [@ id = 'announcement'] [1]'을 반대로하거나'following ::'축으로 작업하고 어디서 그것을 볼 수 있습니다. – Tomalak

관련 문제