Преобразование xhtml с помощью xslt - проблема с отображением в веб-браузере - PullRequest
0 голосов
/ 31 января 2011

Я пытаюсь преобразовать веб-страницу XHTML, используя XSLT, извлекая некоторые ее части.Например, я хотел бы извлечь части 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-> XHTML), а затем мое преобразование xslt.Когда я смотрю на выходной код, все выглядит примерно так:

Оригинальный код: codepad.org/5D7MCXSkКод после преобразования: http://codepad.org/fGzyAwF2

За исключением случаев, когда я открываю его в веб-браузере, я получаю "белую стену" - ничего не появляется.Я заметил, что в исходном коде преобразованного сайта (как в Chrome, так и в Firefox) синтаксис подсвечивается вплоть до закрывающего тега HEAD.Это очень странно, и я считаю, что это вызывает проблему.

Любая помощь будет очень признательна.Заранее спасибо

1 Ответ

1 голос
/ 01 февраля 2011

Так что кажется, что http://codepad.org/5D7MCXSk (код 1) совпадает с исходным кодом http://wordpress.org/about/ (код 2), и вы обрабатываете этот код с помощью "neko очистителя" (это тот : http://nekohtml.sourceforge.net/?) В результате получается документ http://codepad.org/fGzyAwF2 (код 3). Поправь меня, если я ошибаюсь.

Причиной, по которой код 3 ничего не показывает в браузере, является самозакрывающаяся <SCRIPT/> в конце <HEAD>. Да, но в моих тестах по какой-то причине браузерам это не понравилось.

Ваш XSLT-код слегка ошибочен, но если вы введете код 3 в качестве входного, он выдаст выходной. Причуда входного файла, этот самозакрывающийся элемент сценария, сохраняется в преобразовании.

Некоторые случайные заметки:

  • Исходный ввод (код 1) представляет собой правильно сформированный XML, поэтому вам не нужно «очищать» его
  • <xsl:copy-of> не имеет атрибута disable-output-escaping
  • Нет смысла определять пространство имен по умолчанию для выходного документа при использовании method="html", потому что html не использует пространства имен (в отличие от xhtml)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...