2011-06-21 73 views
2

如果我使用XSLT在XHTML文件中選擇DIV標記,如//*[@id='background']如何向DIV中添加樣式,如背景顏色或其他CSS樣式,如邊框?如果我在DIV ID =背景中有一個列表,我如何設計列表的樣式,如刪除子彈? :)CSS樣式和XSLT?

+0

+1個不錯的問題。 –

回答

4

這對於XSLT來說非常簡單。例如,您輸入的是:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <div id="background"> 
      <ul style="list-style-type: bullet"> 
       <li>Coffee</li> 
       <li>Tea</li> 
       <li>Milk</li> 
      </ul>  
     </div> 
    </body> 
</html> 

您可以使用身份轉換爲的就是複製輸入XML,並重寫感興趣的節點:

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:x="http://www.w3.org/1999/xhtml" 
    exclude-result-prefixes="x"> 

    <xsl:output method="xml" indent="yes"/> 

    <xsl:strip-space elements="*"/> 

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

    <xsl:template match="x:div[@id='background']"> 
     <xsl:copy> 
      <xsl:attribute name="style"> 
       <xsl:text>border-style:solid;border-width:medium</xsl:text> 
      </xsl:attribute> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="x:ul[ancestor::* 
     [name()='div' and @id='background']]/@style"> 
     <xsl:attribute name="style"> 
      <xsl:text>list-style-type: none</xsl:text> 
     </xsl:attribute> 
    </xsl:template> 

</xsl:stylesheet> 

輸出將是:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    <head> 
     <title></title> 
    </head> 
    <body> 
     <div style="border-style:solid;border-width:medium" id="background"> 
     <ul style="list-style-type: none"> 
      <li>Coffee</li> 
      <li>Tea</li> 
      <li>Milk</li> 
     </ul> 
     </div> 
    </body> 
</html> 
+0

更新爲包含列表樣式更新。 –

+0

謝謝!到現在爲止還沒有時間看代碼。如何將輸入XHTML與XSLT文件連接以生成輸出XHTML。它是否像在轉換純XML時將XSLT引用放入輸入的開頭一樣? –

+0

通過這個問題,我想你想要使用瀏覽器內置處理器來應用你的變換。對?是的,應該在轉換純XML時使用相同的方式,並引用樣式表。 –