使用xslt转换xhtml - 在Web浏览器中显示问题

时间:2011-01-31 15:57:42

标签: html xslt xhtml

我尝试通过提取一些部分来使用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标记。这很奇怪,我认为它导致了这个问题。

任何帮助将非常感谢。 提前致谢

1 个答案:

答案 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作为输入提供,则会产生输出。输入文件的怪癖,即自闭项脚本元素,将保留在转换中。

一些随机记录:

  • 原始输入(代码1)是格式良好的XML,因此您无需“净化”它
  • <xsl:copy-of>没有属性disable-output-escaping
  • 使用method="html"时,为输出文档定义默认命名空间是没有意义的,因为html不使用命名空间(与xhtml不同)
相关问题