2016-01-24 2 views
2

Я преобразовываю xhtml в xhtml, но мне нужна таблица стилей xslt, которая будет частью результирующего документа (таблица стилей будет содержаться в элементе <script type"text/template">.Я использую команду xsl:namespace-alias , который отлично работает в IE, но не может и в Chrome и FirefoxXSLT namespace-alias Не работает в Firefox или Chrome

Вот соответствующий код:.

<xsl:output doctype-system="about:legacy-compat" omit-xml-declaration="yes" indent="yes" method="html" media-type="application/xhml" encoding="utf-8"/> 
<xsl:namespace-alias stylesheet-prefix="wxsl" result-prefix="xsl" /> 

    <xsl:template match="head"> 
    <!-- Some code omitted for clarity --> 
     <script type="text/template"> 

     <wxsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:eli="local"> 

      <wxsl:template select="/"> 
      <wxsl:apply-templates /> 
     </wxsl:template> 


     </wxsl:stylesheet> 


    </script> 

    </xsl:copy> 
    </xsl:template> 

Он выдает желаемое преобразование в IE, но XSLT процессоры для Firefox и Chrome не являются заменяя префикс wxsl на xsl.

ответ

3

Mozilla не поддерживает его, есть открытый отчет об ошибке https://bugzilla.mozilla.org/show_bug.cgi?id=213996.

Что касается Chrome, я написал короткий тестовый пример с входной XHTML является http://home.arcor.de/martin.honnen/xslt/test2016012402.xml (только короткий отрывок XHTML с head, чтобы добавить некоторые XSLT затем с помощью XSLT) и таблицы стилей http://home.arcor.de/martin.honnen/xslt/test2016012401.xsl делать XHTML для преобразования XHTML, используя псевдоним для защиты любого XSLT и XSLT вложенная XHTML элементы результата:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0" 
    xmlns:xhtml="http://www.w3.org/1999/xhtml" 
    xmlns:axsl="http://example.com/xsl-alias" 
    xmlns:axhtml="http://example.com/xhtml-alias" 
    exclude-result-prefixes="xhtml axsl axhtml" 
    xmlns="http://www.w3.org/1999/xhtml"> 

<xsl:output method="xml" indent="yes"/> 

<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/> 
<xsl:namespace-alias stylesheet-prefix="axhtml" result-prefix="#default"/> 

<xsl:template match="@* | node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="xhtml:head"> 
    <xsl:copy> 
    <xsl:apply-templates select="@* | node()"/> 
    <axsl:stylesheet version="1.0"> 
     <axsl:template match="/"> 
     <axhtml:p>XSLT created paragraph.</axhtml:p> 
     </axsl:template> 
    </axsl:stylesheet> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

и Chrome, кажется, преобразование, просто отлично, консоль на обследование показывает, что результат элементы находятся в нужном пространстве имен:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<title>Test</title> 
<axsl:stylesheet xmlns:axsl="http://www.w3.org/1999/XSL/Transform" version="1.0"><axsl:template match="/"><axhtml:p xmlns:axhtml="http://www.w3.org/1999/xhtml">XSLT created paragraph.</axhtml:p></axsl:template></axsl:stylesheet></head> 
<body> 
<h1>Test</h1> 
</body> 
</html> 

Я расширил тестовый пример, чтобы попытаться выполнить встроенную таблицу стилей, и как Edge, так и Chrome могут это сделать, см. http://home.arcor.de/martin.honnen/xslt/test2016012407.xml, хотя Chrome по причинам, которые я не смог идентифицировать, не смог выполнить это в прослушивателе событий DOMContentLoaded I есть. Но, похоже, это не проблема, связанная с использованием XSLT для вставки XSLT, когда я использую кнопку для запуска скрипта, выполняющего XSLT со встроенной таблицей стилей, он отлично работает в Chrome. Firefox, очевидно, с отсутствием поддержки для xsl:namespace-alias, никогда не находит корневой элемент таблицы стилей, чтобы иметь некоторый код для подачи до XSLTProcessor.

Смежные вопросы