将XSL嵌入XML文件

6
我正在尝试将xsl嵌入到XML文件中。这样做的原因是为了创建一个单一的文件,可以移动到不同的计算机上,这将避免移动xsl文件的需要。
xsl文件创建一个表格,并从xml中获取一个测试步骤及其是否通过或失败,非常简单。我遇到的问题是,xsl中包含JavaScript,在加载IE中的xml时会显示JavaScript。当我使用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>
3个回答

11

虽然W3C XSLT规范支持将XSLT样式表嵌入XML文档中,但似乎IE和Firefox不支持此功能。

更新:根据Robert Niestroj的评论,在多年后的2014年10月,这在FireFox 33中可以使用。

然而,有一个好的替代方案:将XML文档嵌入XSLT样式表中

下面是一个例子。

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

<?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>指令)。


1
在将文档嵌入到样式表中时,请注意以下重要事项 - 文件名已编码在样式表的第一行中。这意味着,如果您重命名文件,则文档将无法解析。 - Colen
@RobertNiestroj,感谢您提供的信息。已更新答案。 - Dimitre Novatchev

0

由于您的样式表使用了msxsl,因此适用于IE浏览器的以前的嵌入样式表的技术对您来说应该是可以的。

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


你是想用这个信息修改之前的回答吗?我可以帮你做到。你失去了与之前账户的连接吗?点击页面底部的“联系我们”链接并告诉团队。 - John Saunders

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接