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 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') );
我想在 Chrome 或 Safari 移动浏览器 (Webkit) 上使用 XSLTProcessor 处理网页。
我的测试在 Firefox 中运行良好,但在 Chrome/Safari 浏览器中运行不佳。函数 transformToDocument returns null,非常简单的文档除外。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<p>Hello 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') );