Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
googlechrome中的javascript-XSL_Javascript_Xslt_Google Chrome - Fatal编程技术网

googlechrome中的javascript-XSL

googlechrome中的javascript-XSL,javascript,xslt,google-chrome,Javascript,Xslt,Google Chrome,我使用以下javascript代码来显示xml/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.implementat

我使用以下javascript代码来显示xml/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,但chrome在以下方面失败:

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

感谢您的帮助

谷歌浏览器目前对XSL的支持有限。如果XSL引用任何外部资源(
document()
函数、
XSL:import
XSL:include
或外部实体),XSL将运行,但结果将为空或无效

如果这不是问题的原因,则问题可能不同:
resultDocument
document
不共享同一根。尝试使用或类似的技术。如果失败,并且您确定resultDocument具有有效内容,请将其转换为字符串,手动添加节点,并将新节点的
innerHTML
设置为字符串。我知道,这很难看,但在Chrome成熟之前,我们需要一些变通办法……

我发现Chrome(至少对于tr和td标记而言)需要格式良好的html。例如,您不能从tr开始-它必须在tbody(或thead)中,但您也不能从那里开始,它必须放在表标记中。。。(我认为xslt引擎不会原谅html规则——即使您试图形成一个片段。)

所以,如果您想从xslt中得到一个表,请完成整个工作,而不是一部分。请这样做:

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

不是这个:

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

或者这个:

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

或者根据我的经验,tr标签丢失了,看起来像是很多文本