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

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

6 голосов
/ 11 декабря 2008

Я пытаюсь встроить 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>

Ответы [ 3 ]

11 голосов
/ 12 декабря 2008

Хотя спецификация 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>

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

Привет, я foo

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

0 голосов
/ 28 февраля 2010

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

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

0 голосов
/ 25 января 2010

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

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

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

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

...