2010-06-10 41 views
1

我想使用javascript函數運行xsl文件。我寫這與Firefox和克羅姆行之有效一個javascrpt功能,但它不工作在Internet Explorer如何使用JavaScript/HTML文件運行XSL文件

 function loadXMLDoc(dname) 
    { 
     if (window.XMLHttpRequest) 
      { 
       xhttp=new XMLHttpRequest(); 
      } 
     else 
      { 
       xhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     xhttp.open("GET",dname,false); 
     xhttp.send(""); 
     return xhttp.responseXML; 
    } 

    function displayResult() 
    { 
     xml=loadXMLDoc("NewXml.xml"); 
     xsl=loadXMLDoc("NewFile.xsl"); 
     // code for IE 
     if (window.ActiveXObject) 
     { 
      ex=xml.transformNode(xsl); 
      document.getElementById("example").innerHTML=ex; 
     } 

     // code for Mozilla, Firefox, Opera, etc. 
     else if (document.implementation && document.implementation.createDocument) 
      { 
       xsltProcessor=new XSLTProcessor(); 
       xsltProcessor.importStylesheet(xsl); 
       resultDocument = xsltProcessor.transformToFragment(xml,document); 
       document.getElementById("example").appendChild(resultDocument); 
      } 
    } 

請幫我修改這個代碼或其他代碼,這樣我就可以使用Internet Explorer工作。

感謝

回答

0

申請我使用XSL改造中,促進,Sarissa。它是一個交叉瀏覽器庫,它包含了不同瀏覽器的xml apis。

對於您可以直接前往howto page 與薩里沙長槍一改造中的一個例子,但它是與此類似:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html> 
<head> 
    <title>sarissa test1</title> 
    <script type="text/javascript" src="sarissa.js"></script> 
</head> 
<body> 
    <script type="text/javascript"> 
    function loadXMLDoc(dname) { 
     xhttp = new XMLHttpRequest(); 
     xhttp.open("GET",dname,false); 
     xhttp.send(""); 
     return xhttp.responseXML; 
    } 

    var processor = new XSLTProcessor(); 
    var theXML = loadXMLDoc('xml.xml'); 
    var theXSL = loadXMLDoc('xsl.xsl'); 

    // prepare the processor 
    processor.importStylesheet(theXSL); 

    var theResult = processor.transformToDocument(theXML); 
    // now you have a DomDocument with the result 
    // if you want to serialize (transform to a string) it you van use 

    document.write(new XMLSerializer().serializeToString(theResult)); 
    </script> 
</body> 
</html> 

快速,簡單,編程和維持,你可以關注你的努力給XSL創作,而不是比努力克服瀏覽器差異。

單毛刺,對我來說是一個加號,但有人可能會認爲這是一個限制,代碼GPL 2.1下發布或更高,或者,如果你喜歡Apache許可證2.0或更高

編輯:礦錯誤,我發佈了一箇舊的(和錯誤的代碼),而沒有檢查它。在firefox,chrome,ie8,ie7上創建了一個模擬腳本的新版本(並對其進行了測試),它的工作無懈可擊。我使用了谷歌搜索中找到的前兩個xsl/xml(我在下面報告它們的完整性爲 )。按照原樣並使用xsl/xml嘗試代碼。如果出現問題,也會報告故障(我們可以通過比更深的錯誤描述更有效 - 不起作用 -)。代碼行爲不當時會發生什麼? (瀏覽器凍結,報告錯誤,返回空白結果)

XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<!--?xml-stylesheet type="text/xsl" href="xsl.xsl"?--> 
<tutorials> 
    <tutorial> 
    <name>XML Tutorial</name> 
    <url>http://www.quackit.com/xml/tutorial</url> 
    </tutorial> 
    <tutorial> 
    <name>HTML Tutorial</name> 
    <url>http://www.quackit.com/html/tutorial</url> 
    </tutorial> 
</tutorials> 

的xsl:

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<!-- try to enable/disable the xsl:output --> 
<!-- xsl:output method="xml" 
       version="1.0" 
       encoding="iso-8859-1" 
       indent="yes"/--> 

<xsl:template match="/"> 
<html> 
<head> 
<title>XML XSL Example</title> 
<style type="text/css"> 
body 
{ 
margin:10px; 
background-color:#ccff00; 
font-family:verdana,helvetica,sans-serif; 
} 

.tutorial-name 
{ 
display:block; 
font-weight:bold; 
} 

.tutorial-url 
{ 
display:block; 
color:#636363; 
font-size:small; 
font-style:italic; 
} 
</style> 
</head> 
<body> 
<h2>Cool Tutorials</h2> 
<p>Hey, check out these tutorials!</p> 
    <xsl:apply-templates/> 
</body> 
</html> 
</xsl:template> 
<xsl:template match="tutorial"> 
    <span class="tutorial-name"><xsl:value-of select="name"/></span> 
    <span class="tutorial-url"><xsl:value-of select="url"/></span> 
</xsl:template> 

</xsl:stylesheet> 
+0

這組代碼也無法正常工作的Internet Explorer .... 。 Plz檢查它並幫助我。 謝謝 – 2010-06-11 09:45:42