xsl: импорт и xsl: включение в таблицы стилей не работают в Google Chrome

StackOverflow https://stackoverflow.com/questions/1620589

  •  06-07-2019
  •  | 
  •  

Вопрос

Я создаю веб-сайт, который использует таблицы стилей xsl, и я создаю небольшую библиотеку полезных функций в таблице стилей util, с которой импортируются другие таблицы

<xsl:import href="util" />

в верхней части каждого листа.Это не работает в Google Chrome, так как он пока не поддерживает xsl: импорт.Может кто-нибудь, пожалуйста, написать мне таблицу стилей, которую я могу запустить на стороне сервера, которая будет считывать строку xsl: import и импортировать соответствующую таблицу стилей перед ее отправкой клиенту?

Это было полезно?

Решение

Я бы сделал что-то вроде следующего, которое объединит серверную таблицу стилей, прежде чем она попадет в Chrome. Первый шаг на месте, потому что xsl:import отличается от замены всех мест импортированными таблицами стилей.

<Ол>
  • Замените все xsl:include на <=> (приоритет импорта не применим к <=>, поэтому вам может потребоваться изменить код и использовать приоритеты)
  • Используйте приведенную ниже таблицу стилей на стороне сервера, чтобы объединить их в одну перед отправкой
  • Подождите несколько недель (могут быть месяцы). Я создал исправление для Chrome и в настоящее время работаю с командой разработчиков, чтобы включить это исправление в сборку.
  • <xsl:template match="node()">
        <xsl:copy>
           <xsl:copy-of select="@*"/>
           <xsl:apply-templates select="node()"/>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="xsl:include">
       <!-- you'll probably want to be a bit more restrictive here -->
       <xsl:copy-of select="document(@href)/xsl:stylesheet/*" />
    </xsl:template>
    

    Обновление . Примечание: ошибка Chrome появляется и в Safari.

    Другие советы

    Вы можете сделать это в Python с модулями libxml2 и libxslt ... не для того, чтобы делать всю работу за вас, а начинать с чего-то вроде этого:

    import libxml2, libxslt
    
    styledoc = libxml2.parseFile("page.xsl")
    style = libxslt.parseStylesheetDoc(styledoc)
    doc = libxml2.parseFile("somefile.xml")
    result = style.applyStylesheet(doc, None)
    

    Тогда просто подайте вещь обратно.

    Попробуйте что-то подобное в php:

    <?php
    $sXml  = "<xml>";
    $sXml .= "<testtag>hello tester</testtag>";
    $sXml .= "</xml>";
    
    # LOAD XML FILE
    $XML = new DOMDocument();
    $XML->loadXML( $sXml );
    
    # START XSLT
    $xslt = new XSLTProcessor();
    $XSL = new DOMDocument();
    $XSL->load( 'xsl/index.xsl', LIBXML_NOCDATA);
    $xslt->importStylesheet( $XSL );
    #PRINT
    print $xslt->transformToXML( $XML );
    ?>
    

    http://www.w3.org/TR/xslt#literal -result-element показывает, как решить проблему с duplicate-xsl-namespace при написании таблицы стилей XSL, которая преобразует вашу существующую таблицу стилей XSL в таблицу стилей XSL с расширением <xsl:import>.

    Будьте осторожны с разницей между <xsl:include> и <=>.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top