XSLTProcessor.transformToDocument returns Chrome/Webkit 中为空

XSLTProcessor.transformToDocument returns null in Chrome/Webkit

我想在 Chrome 或 Safari 移动浏览器 (Webkit) 上使用 XSLTProcessor 处理网页。

我的测试在 Firefox 中运行良好,但在 Chrome/Safari 浏览器中运行不佳。函数 transformToDocument returns null,非常简单的文档除外。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<p>Hello&nbsp;world</p>
<div>transformToDocument:</div>
<script>
  var xmlSerializer = new XMLSerializer ();
  var domParser = new DOMParser ();
  var xsltProcessor = new XSLTProcessor ();
  var xslString = '<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">' +
      '<xsl:output method="html"/>' +
      '<xsl:template match="//p"><p><i><xsl:value-of select="."/></i></p></xsl:template>' +
      '<xsl:template match="text()"/>' +
      '</xsl:transform>';
  var xsl = domParser.parseFromString (xslString, 'text/xml');
  xsltProcessor.importStylesheet (xsl);
  var result = xsltProcessor.transformToDocument (document);
  console.log (result); // null with Chrome
  console.log (xmlSerializer.serializeToString (result));
  document.writeln (xmlSerializer.serializeToString (result));
</script>
</body>
</html>

奇怪的是,如果我删除 meta 标签和 nbsp 实体,该示例会起作用。

你能告诉我哪里出了问题以及如何解决吗?

回复我自己的问题:

  • 使用 XMLSerializer 然后 DOMParser 将输入 HTML 转换为 XML。
  • 替换 nbsp 实体以解决 Safari 中的错误 (?)。

    var result = xsltProcessor.transformToDocument (domParser.parseFromString (xmlSerializer.serializeToString (文档).replace (' ', ' '), 'text/xml') );