2010-01-07 72 views
3

我用下面的JavaScript代碼來顯示XML/XSL:JavaScript的XSL在谷歌瀏覽器

function loadXMLDoc(fname) 
{ 
    var xmlDoc; 
    // code for IE 
    if (window.ActiveXObject) 
    { 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    } 
    // code for Mozilla, Firefox, Opera, etc. 
    else if (document.implementation 
    && document.implementation.createDocument) 
    { 
    xmlDoc=document.implementation.createDocument("","",null); 
    } 
    else 
    { 
    alert('Your browser cannot handle this script'); 
    } 
    try { 
    xmlDoc.async=false; 
    xmlDoc.load(fname); 
    return(xmlDoc); 
    } 
catch(e) 
{ 
    try //Google Chrome 
    { 
    var xmlhttp = new window.XMLHttpRequest(); 
    xmlhttp.open("GET",file,false); 
    xmlhttp.send(null); 
    xmlDoc = xmlhttp.responseXML.documentElement; 
    return(xmlDoc); 
    } 
    catch(e) 
    { 
    error=e.message; 
    } 
} 
} 

function displayResult() 
{ 
xml=loadXMLDoc("report.xml"); 
xsl=loadXMLDoc("report.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); 
    } 
} 

它可以找到IE和Firefox,但鉻是不能在該行:

document.getElementById("example").appendChild(resultDocument); 

感謝您的幫助

回答

5

Google Chrome目前對XSL的支持有限。如果您的XSL引用任何外部資源(document()函數,xsl:import,xsl:include或外部實體),則XSL將運行,但結果將爲空或無效。

如果這不是問題的原因,則問題可能不同:resultDocumentdocument不共享相同的根。嘗試使用importNode或類似的技術。如果失敗並且您確定resultDocument具有有效內容,請將其轉換爲字符串,手動添加節點,並將新節點的innerHTML設置爲字符串。我知道,這是醜陋的,但直到Chrome成熟,我們需要一些解決方法...

+0

謝謝,我奮鬥了整整一個早上尋找這個 – Juan 2013-04-26 15:12:18

3

我發現鉻(至少爲tr和td標籤),需要格式正確的html。例如,你不能從tr開始 - 它必須在tbody(或thead)中,但是你也不能從那裏開始,它必須放置在一個表格標籤內......(我認爲xslt引擎不能原諒即使你試圖構成一個片段。)

所以,如果你想從xslt表中做 - 整個事情,而不是一部分。即這樣做:

<table><tbody><tr><td></td></tr></tbody></table> 

不是這個:

<tbody><tr><td></td></tr></tbody> 

或本:

<tr><td></td></tr> 

還是以我的經驗,TR標籤迷路了,它只是看起來像一個大量的文字。