我尝试通过提取一些部分来使用XSLT转换XHTML网页。例如,我想分别提取HEAD和BODY部分(它只是第一步,接下来将提取一些div)并在我的输出XHTML文档中使用它们。这是XSLT代码:
<xsl:stylesheet version="2.0"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xhtml xsl xs">
<xsl:output
method="html"
omit-xml-declaration="yes"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
indent="yes"/>
<xsl:template match="/">
<HTML>
<xsl:apply-templates/>
</HTML>
</xsl:template>
<xsl:template match="xhtml:HTML/xhtml:BODY">
<xsl:copy-of select="." disable-output-escaping="yes" />
</xsl:template>
<xsl:template match="xhtml:HTML/xhtml:HEAD">
<xsl:copy-of select="." disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>
作为输入XHTML,我有www.wordpress.org/about源代码(验证)。 当第一个neko净化器被激活(HTML-&gt; XHTML)然后我的xslt变换。当我查看输出代码时,一切看起来都很相似:
原始代码:codepad.org/5D7MCXSk
转型后的代码:http://codepad.org/fGzyAwF2
除此之外,当我在网络浏览器中打开它时,我会得到“白墙” - 什么都没有出现。我注意到在转换网站的源代码中(在chrome和firefox上)语法突出显示到关闭的HEAD标记。这很奇怪,我认为它导致了这个问题。
任何帮助将非常感谢。 提前致谢
答案 0 :(得分:1)
所以似乎http://codepad.org/5D7MCXSk(代码1)与http://wordpress.org/about/(代码2)的源代码相同,并且您使用“neko purifier”处理此代码(就是这一个:{ {3}}?)在http://nekohtml.sourceforge.net/(代码3)中生成了文档。如果我错了,请纠正我。
代码3在浏览器中没有显示任何内容的原因似乎是<SCRIPT/>
末尾的自我关闭<HEAD>
。 YMMW,但在我的测试中由于某些原因浏览器似乎不喜欢它。
您的XSLT代码存在轻微缺陷,但如果您将代码3作为输入提供,则会产生输出。输入文件的怪癖,即自闭项脚本元素,将保留在转换中。
一些随机记录:
<xsl:copy-of>
没有属性disable-output-escaping
method="html"
时,为输出文档定义默认命名空间是没有意义的,因为html不使用命名空间(与xhtml不同)