2008-12-11 85 views
6

我試圖將xsl嵌入到XML文件中。這樣做的原因是創建一個可以移動到不同計算機的單個文件,這將防止需要移動xsl文件。將xsl嵌入XML文件

xsl文件正在創建一個表並從xml獲取測試步驟,以及它是否通過或失敗,非常簡單。
我遇到的問題是,xsl具有javascript,並且在xml在IE中加載時顯示它。

當我用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> 

回答

11

Although the W3C XSLT Spec supports embedding an XSLT stylesheet爲XML文檔,似乎IE和Firefox並不支持這一點。

UPDATE:按照由羅伯特·尼斯特羅傑評論,多年以後,10月份到2014年,這一工程在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被打開,通緝的結果是由瀏覽器顯示:

你好,我是富

請注意,它需要包含忽略大部分XSLT指令的模板(在這種情況下,我們忽略了任何<xsl:template>通過簡單地沒有模板身體。

+1

當您在樣式表中嵌入文檔時的重要注意事項 - 文件名編碼在樣式表的第一行。這意味着如果您重命名文件,文檔將不再解析。 – Colen 2010-06-15 16:53:48

+0

它在Firefox 33中工作。今天檢查。 – 2014-10-30 14:38:27