我正在尝试将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>
解决方法
Although the W3C XSLT Spec supports embedding an XSLT stylesheet成一个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>
你好,我是foo
请注意,有必要包含忽略大多数XSLT指令的模板(在这种情况下,我们忽略任何< xsl:template>只是没有模板体.