2011-06-22 188 views
1

我試圖從另一個XHTML文檔創建一個新的XHTML文檔。我只想在舊的XHTML文檔中使用一些DIV標籤,但我不確定是否正確。首先,如果我要選擇具有ID = mbContent一個特殊的DIV標籤,我可以用用XSLT選擇DIV標籤?

<xsl:template match="x:div[@id='mbContent']"> 

這個DIV標籤包含其他的DIV和圖像等內容等等。如果我想使用應用於內容的相同CSS樣式,我該怎麼辦?有沒有辦法複製CSS樣式,或者我必須添加新的CSS樣式,我該怎麼做?由於新的XHTML文檔將成爲antother XHTML的一部分,因此我不能使用HEAD標籤,並以這種方式引用CSS樣式表。

嗯,但如果我使用CSS樣式表將會在主XHTML documnet的HEAD中,也許我可以將該CSS樣式應用於此DIV,或者?如何在新的XHTML文檔中應用樣式?

我有點困惑,但我希望我的問題不是混淆?! :)

嗨!我需要一些新的幫助,因爲下面的代碼不適合我。這是行不通的 xmlns:x="http://www.w3.org/1999/xhtml" and "x:div[@id='mbContent']" 我認爲這是因爲我使用的CMS工具有一個代理模塊,出於某種奇怪的原因不接受此代碼。因此,我正在尋找一些替代解決方案來添加CLASS或ID,並通過使用此代替DIV元素來添加值xsl:apply-templates select="//*[@id='mbSubMenu']",並且還可以使用下面的示例中的副本?請提供一些新的幫助!謝謝! :)

+1

可能[重複](http://stackoverflow.com/questions/6431330/css-style-and-xslt)。 –

回答

1

表達式中使用的Xpath是好的,直到您在XSLT文檔中使用x作爲xmlns。

該模板將匹配<div>,前提是其ID爲mbContent,並且所選上下文將具有所有後代。

您可以更改元素的內聯CSS。既然你說這部分將會在其他一些XHTML文檔中。您可以選擇XML作爲輸出。 如果您想更改內聯CSS。 您也可以爲它們分配不同的類,以便它自動採用全局樣式。

這個想法是給定一個XML文檔,您將它轉換爲另一個XML文檔。 因此,您可以根據需要應用樣式。

我希望能回答你的問題。

P.S.在XPath表達式中使用正確的xmlns。

我們假設以下是HTML文檔。

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <title></title> 
</head> 
<body> 
    <div id="mbContent"> 
     <div> 
      <span>Some complex structure</span> 
     </div>  
    </div> 
</body> 

應用以下XSL

<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='mbContent']"> 
    <xsl:copy> 
     <xsl:attribute name="class"> 
      <xsl:text>someNewStyle</xsl:text> 
     </xsl:attribute> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

這將導致下面的輸出。

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
    <title/> 
</head> 
<body> 
    <div class="someNewStyle" id="mbContent"> 
     <div> 
      <span>Some complex structure</span> 
     </div> 
    </div> 
</body> 

你可以改變,以滿足您的需要XSL。

Regards,

Ravish。

+0

謝謝,儘管我使用xmlns:x =「http://www.w3.org/1999/XSL/Transform」我在DIV mbContent外部獲得內容(僅在文本中)如何將內聯樣式應用於此DIV? – user790843

+0

回答您對DIV外部內容的評論問題mbContent(僅在文本中):這似乎是標準內置模板的輸出。爲了避免這種情況,一定要在XSLT代碼的末尾使用像這樣的空模板來捕捉其他任何內容。 – Andreas

+0

當我在瀏覽器中嘗試上面的代碼,然後查看源代碼時,沒有添加class =「someNeSStyle」!我在HTML soucre的第一行放置了這行代碼<?xml-stylesheet type =「text/xsl」href =「transform.xsl」?>這是通過在實際的XHTML文檔中插入引用來轉換XHTML文檔的唯一方法嗎?如果XSL文件和XHTML文件都位於服務器上的同一文件夾中,我希望你能以其他方式閱讀或鏈接源代碼? Preciate回答我的評論! :) – user790843