Вставить xsl в файл XML

Я пытаюсь встроить xsl в файл XML. Причина этого заключается в том, чтобы создать один файл, который можно было бы перемещать на разные компьютеры, это избавило бы от необходимости перемещать файл xsl.

Файл xsl создает таблицу и берет тестовый шаг из xml, а также независимо от того, прошел он или не прошел, довольно просто. Я думаю, что проблема в том, что в xsl есть javascript, и он отображается, когда xml загружается в IE.

Когда я загружаю xml-файл в IE, над таблицей отображается javascript, а под таблицей отображается xml.

Вот как оформлен мой документ:

<!DOCTYPE doc [
<!ATTLIST xsl:stylesheet
  id    ID  #REQUIRED>
]>

<doc>    

<xsl:stylesheet id = "4.1.0" 
    version = "1.0"
    xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" 
    xmlns:msxsl = "urn:schemas-microsoft-com:xslt" 
    xmlns:user = "http://www.ni.com/TestStand" 
    xmlns:vb_user = "http://www.ni.com/TestStand/" >

<xsl:template match = "xsl:stylesheet" />
     <xsl:text disable-output-escaping = "yes">

    <msxsl:script language = "vbscript" implements-prefix = "vb_user">
        option explicit
        'This function will return the localized decimal point for a decimal number
        Function GetLocalizedDecimalPoint ()
            dim lDecPoint
            lDecPoint = Mid(CStr(1.1),2,1)
            GetLocalizedDecimalPoint = lDecPoint
        End Function
    </msxsl:script>
    <msxsl:script language = "javascript" implements-prefix = "user"><![CDATA[
        // This style sheet will not show tables instead of graphs for arrays of values if 
        // 1. TSGraph control is not installed on the machine
        // 2. Using the stylesheet in windows XP SP2. Security settings prevent stylesheets from creatign the GraphControl using scripting. 
        //     Refer to the TestStand Readme for more information.

//more javascript functions
//code to build table and insert data from the xml

</xsl:stylesheet>

<Reports>
<Report Type='UUT' Title='UUT Report' Link='-1-2008-12-3-10-46-52-713' UUTResult='Failed' StepCount='51'>

// rest of xml

</Report>

</Reports>
</doc>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
0
9 437
3

Ответы 3

Хотя спецификация W3C XSLT поддерживает встраивание таблицы стилей XSLT в XML-документ, похоже, что IE и Firefox не поддерживают это.

ОБНОВИТЬ: Согласно комментарию Роберта Ниестроя, годы спустя, в октябре 2014 года, это работает в FireFox 33.

Однако есть хорошая альтернатива: встроить XML-документ в таблицу стилей XSLT..

Ниже приведен пример.

Таблица стилей XSLT, содержащая встроенный XML-документ:

<?xml-stylesheet type = "text/xsl" href = "myEmbedded.xml"?>
<xsl:stylesheet version = "1.0"
 xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration = "yes"/>
    <xsl:variable name = "vEmbDoc">
        <doc>
            <head></head>
            <body>
                <para id = "foo">Hello I am foo</para>
            </body>
        </doc>
    </xsl:variable>
    <xsl:template match = "para">
      <h1><xsl:value-of select = "."/></h1>
    </xsl:template>
    <xsl:template match = "xsl:template"/>
</xsl:stylesheet>

Когда tis файл открывается в IE, в браузере отображается желаемый результат:

Привет я фу

Обратите внимание, что необходимо включать шаблоны, которые игнорируют большинство инструкций XSLT (в этом случае мы игнорируем любой <xsl:template>, просто не имея тела шаблона.

Важное примечание, когда вы встраиваете документ в подобную таблицу стилей - имя файла кодируется в первой строке таблицы стилей. Это означает, что если вы переименуете файл, документ больше не будет анализироваться.

Colen 15.06.2010 20:53

@RobertNiestroj, Спасибо за эту информацию. Обновил ответ.

Dimitre Novatchev 30.10.2014 19:00

Встраивание таблицы стилей возможно для большинства браузеров, кроме IE. Найдите ссылку на описание и пример в публикации ниже.

IE6 / 7/8 по умолчанию не поддерживает встроенные таблицы стилей.

Вы можете использовать обходной путь, позволяющий IE обрабатывать встроенные таблицы стилей отсюда:

http://www.biglist.com/lists/lists.mulberrytech.com/xsl-list/archives/201001/msg00390.html

Поскольку ваша таблица стилей использует msxsl, предыдущий метод включения встраивания таблиц стилей для браузеров IE должен вам подойти.

Если вам нужно встраивание таблиц стилей, которое работает во всех браузерах, вы можете использовать технику поддержка встраивания таблиц стилей для ВСЕХ браузеров.

Вы хотели изменить свой предыдущий ответ с помощью этой информации? Я могу сделать это за тебя. Вы потеряли связь с предыдущей учетной записью? Щелкните ссылку «связаться с нами» внизу страницы и сообщите об этом команде.

John Saunders 28.02.2010 04:37

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