最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

xslt - javascript XSL in google chrome - Stack Overflow

programmeradmin1浏览0评论

I'm using the following javascript code to display 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);
  }
}

It works find for IE and Firefox but chrome is fail in the line:

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

Thank you for you help

I'm using the following javascript code to display 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);
  }
}

It works find for IE and Firefox but chrome is fail in the line:

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

Thank you for you help

Share Improve this question edited Apr 16, 2010 at 13:42 Kinlan 16.6k5 gold badges58 silver badges88 bronze badges asked Jan 7, 2010 at 13:42 GuyGuy 3252 gold badges6 silver badges14 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 5

Google Chrome currently has limited support for XSL. If your XSL refers to any external resources (document() function, xsl:import, xsl:include or external entities), the XSL will run but the result will either be empty or invalid.

If that's not the cause of your problem, the issue can be different: resultDocument and document do not share the same root. Try to use importNode or a similar technique. If that fails and you're certain that resultDocument has valid contents, transform it to a string, add a node manually, and set innerHTML of the new node to the string. I know, it's ugly, but until Chrome bees mature we'll need some workarounds...

I have found that Chrome (for tr and td tags at least), requires well formed html. Eg you cannot start at tr - it must be in a tbody (or thead), but you can't start there either, it must be placed inside a table tag... (I don't think the xslt engine is forgiving on the rules of html - even if you are trying to form a fragment.)

So if you want table from an xslt - do the whole thing, not a part. Ie Do this:

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

NOT THIS:

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

OR THIS:

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

Or in my experience, the tr tags got lost and it just looked like a lot of text.

发布评论

评论列表(0)

  1. 暂无评论