6

我正在尝试将 xsl 嵌入到 XML 文件中。这样做的原因是创建一个可以移动到不同计算机的单个文件,这将避免移动 xsl 文件的需要。

xsl 文件正在创建一个表并从 xml 中获取一个测试步骤,以及它是通过还是失败,非常简单。
我认为,我遇到的问题是 xsl 有 javascript,并且在 IE 中加载 xml 时会显示它。

当我用 IE 加载 xml 文件时,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>
4

3 回答 3

11

尽管 W3C XSLT Spec 支持将 XSLT 样式表嵌入XML 文档,但 IE 和 Firefox 似乎不支持这一点。

更新:根据 Robert Niestroj 的评论,多年后,2014 年 10 月,这适用于 FireFox 33。

但是,有一个很好的选择:将 XML 文档嵌入到 XSLT 样式表中。

下面是一个例子。

包含嵌入式 XML 文档的 XSLT 样式表

<?xml-stylesheet type="text/xsl" href="myEmbedded.xml"?>
<xsl:stylesheet 版本="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:输出省略-xml-declaration="yes"/>
    <xsl:变量名="vEmbDoc">
        <文档>
            <头></头>
            <正文>
                <para id="foo">你好我是 foo</para>
            </正文>
        </doc>
    </xsl:变量>
    <xsl:template match="para">
      <h1><xsl:value-of select="."/></h1>
    </xsl:模板>
    <xsl:template match="xsl:template"/>
</xsl:样式表>

在 IE 中打开 tis 文件时,浏览器会显示想要的结果:

你好我是foo

请注意,有必要包含忽略大多数 XSLT 指令的模板(在这种情况下,我们<xsl:template>通过简单地没有模板主体来忽略任何指令。

于 2008-12-11T22:28:25.207 回答
0

大多数浏览器都可以嵌入样式表,但 IE 除外。在下面的帖子中找到对描述和示例的引用。

IE6/7/8 默认不支持嵌入样式表。

您可能希望使用使 IE 从此处处理嵌入式样式表的解决方法:

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

于 2010-01-25T18:29:33.237 回答
0

因为您的样式表使用了 msxsl,所以之前为 IE 浏览器启用样式表嵌入的技术应该适合您。

如果您想要适用于所有浏览器的样式表嵌入,您可能需要为所有浏览器使用样式表嵌入技术支持

于 2010-02-28T01:34:18.080 回答