2011-06-22 134 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