JavaScript的XSL在谷歌浏览器

问题描述:

我用下面的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); 

感谢您的帮助

Google Chrome目前对XSL的支持有限。如果您的XSL引用任何外部资源(document()函数,xsl:import,xsl:include或外部实体),则XSL将运行,但结果将为空或无效。

如果这不是问题的原因,则问题可能不同:resultDocumentdocument不共享相同的根。尝试使用importNode或类似的技术。如果失败并且您确定resultDocument具有有效内容,请将其转换为字符串,手动添加节点,并将新节点的innerHTML设置为字符串。我知道,这是丑陋的,但直到Chrome成熟,我们需要一些解决方法...

+0

谢谢,我奋斗了整整一个早上寻找这个 – Juan 2013-04-26 15:12:18

我发现铬(至少为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标签迷路了,它只是看起来像一个大量的文字。