javascript - 未定义 : undefined error when calling XSLTProcessor. 原型(prototype).importStylesheet

标签 javascript firefox xslt domparser

我想美化一些 XML,我发现了以下代码( in this answerJSFiddle )。我是这样修改的:

const xsltDoc = new DOMParser().parseFromString([
    // describes how we want to modify the XML - indent everything
    '<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">',
    '  <xsl:output omit-xml-declaration="yes" indent="yes"/>',
    '    <xsl:template match="node()|@*">',
    '      <xsl:copy><xsl:apply-templates select="node()|@*"/></xsl:copy>',
    '    </xsl:template>',
    '</xsl:stylesheet>',
].join('\n'), 'application/xml');
function prettifyXml(sourceXml) {
    var xmlDoc = new DOMParser().parseFromString(sourceXml, 'application/xml');
    var xsltProcessor = new XSLTProcessor();
    // Error happens here:
    xsltProcessor.importStylesheet(xsltDoc);
    var resultDoc = xsltProcessor.transformToDocument(xmlDoc);
    var resultXml = new XMLSerializer().serializeToString(resultDoc);
    return resultXml;
};

我在运行代码时遇到错误,但错误没有任何消息。在 Firefox 控制台中看起来像这样:

enter image description here

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

enter image description here

原始答案中的 Fiddle 中也确实发生了错误。我想知道这是什么类型的错误以及如何修复它。

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

最佳答案

就 XSLT 而言,您需要 version样式表的根元素上的属性,所以尝试 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> .这似乎修复了 importStylesheet 上的错误打电话,见https://jsfiddle.net/sgeryvyu/361/ .

另一方面,众所周知,Firefox/Mozilla 的 XSLT 处理器可以执行树到树的转换,因此 transformToDocument和 Mozilla 你不会得到 xsl:output 的任何序列化选项应用,这意味着尝试通过 XSLT 推送您的 DOM 树只会给您另一个没有所需缩进的 DOM 树。

关于javascript - 未定义 : undefined error when calling XSLTProcessor. 原型(prototype).importStylesheet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51989864/

相关文章:

javascript - 如何在 GSAP 和 Webpack 中使用 ScrollMagic

javascript - 我应该如何在 JavaScript 中注释对象结构?

JavaScript 嵌套函数

javascript - 浏览器开发者工具 : Disable Warnings in 3rd Party Scripts

javascript - 阻止在 Firefox 中选择/复制到剪贴板

xml - 如何实现xsl

xslt - 使用xslt获取X位置的节点值

javascript - 没有马赛克的平铺 <div> 元素

Css 覆盖在 Firefox 中工作,但在 Chrome 中出现问题

xml - XPath、平面层次结构和停止条件