调用XSLTProcessor.prototype.importStylesheet时出现未定义错误。

7 浏览
0 Comments

调用XSLTProcessor.prototype.importStylesheet时出现未定义错误。

我想要美化一些XML,并且我找到了以下代码(在这个回答中,JSFiddle)。我将其修改为这样:

const xsltDoc = new DOMParser().parseFromString([
    // 描述我们想要如何修改XML - 缩进所有内容
    '',
    '  ',
    '    ',
    '      ',
    '    ',
    '',
].join('\n'), 'application/xml');
function prettifyXml(sourceXml) {
    var xmlDoc = new DOMParser().parseFromString(sourceXml, 'application/xml');
    var xsltProcessor = new XSLTProcessor();
    // 错误发生在这里:
    xsltProcessor.importStylesheet(xsltDoc);
    var resultDoc = xsltProcessor.transformToDocument(xmlDoc);
    var resultXml = new XMLSerializer().serializeToString(resultDoc);
    return resultXml;
};

我运行代码时出现了错误,但是错误没有任何信息。在Firefox控制台中看起来是这样的:

[图片链接](https://i.stack.imgur.com/oPJVS.png)

而这是我在调试器中看到的:

[图片链接](https://i.stack.imgur.com/pWLKy.png)

这个错误也会在原始回答中的Fiddle中发生。我想知道这是什么样的错误,以及如何修复它。

我在包含Firefox标签,因为我认为这不是正常的浏览器行为。我的版本是61.0.2(64位)。

0
0 Comments

undefined: undefined error when calling XSLTProcessor.prototype.importStylesheet 的问题出现的原因是在样式表的根元素上需要一个 version 属性。解决方法是在样式表的根元素上添加 version 属性,例如 ``。这个方法可以修复 importStylesheet 调用时的错误。

另一方面,Firefox/Mozilla 的 XSLT 处理器被称为树到树转换,所以在使用 transformToDocument 和 Mozilla 进行转换时,不会应用任何 xsl:output 的序列化选项,这意味着将 DOM 树通过 XSLT 进行转换只会得到另一个没有所需缩进的 DOM 树。

0