xml - 从变量加载 XML 和 XSL 并在浏览器中转换
问题描述
下面的代码片段是我遇到的问题的最小重现。目的是通过 XSL 转换 XML 并将结果转换为变量。
注释行发生错误。我究竟做错了什么?
更大的图景是,我希望能够在浏览器中拥有 XML 文件的 URL 和 XSL 文件的 URL,并使用 XSL 转换 XML。我已经从服务器管道中加载了所有文件,但是我收到了这个错误,并且在 Google 中找不到可以理解的答案。自 2014 年左右以来,客户端的 XML 转换似乎很少受到关注,所以我想知道是否有更现代的技术或插件。
我很乐意接受一个普通的 JS 或 jquery 答案,或一个插件。
我知道这个最小的例子不是跨浏览器(没有针对 IE 风格的解决方案),但我应该说我确实需要一个跨浏览器解决方案作为最终答案。
最后,我知道您可以在服务器上进行转换,这不在规范中。
这是来自控制台的错误和问题。
err=TypeError:无法在“XSLTProcessor”上执行“importStylesheet”:参数 1 不是“节点”类型。
错误:{“消息”:“未捕获的TypeError:无法在'XSLTProcessor'上执行'transformToFragment':参数1不是'Node'类型。”,“文件名”:“ https://stacksnippets.net/js ”, “lineno”:26,“colno”:32}
这是导致错误的代码。
var xsltProcessor, resultDocument, xml, xsl;
var xml = '<?xml version="1.0" encoding="UTF-8"?><catalog><cd><title>Empire Burlesque</title></cd></catalog>';
var xsl = '<?xml version="1.0" encoding="UTF-8"?><xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th style="text-align:left">Title</th> <th style="text-align:left">Artist</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="title" /></td> </tr> </xsl:for-each> </table></xsl:template></xsl:stylesheet>'
xsltProcessor = new XSLTProcessor();
try {
xsltProcessor.importStylesheet(xsl); // < error here !
} catch (error) {
console.log('err=' + error);
}
resultDocument = xsltProcessor.transformToFragment(xml, document);
console.log(resultDocument);
解决方案
要回答您问题的这一部分:
自 2014 年左右以来,客户端的 XML 转换似乎很少受到关注,所以我想知道是否有更现代的技术或插件。
我想说自 2004 年左右以来,浏览器供应商几乎没有关注它。
但是,如果您想要更现代的东西,可以使用 Saxon-JS,它是 XSLT 3.0 的纯 Javascript 实现。它不仅支持 3.0 标准,而且还具有使其具有交互性的扩展,因此您可以直接在 XSLT 代码中处理用户输入事件。详情见http://www.saxonica.com/saxon-js/index.xml
免责声明:Saxon-JS 由我的公司 Saxonica 生产。
推荐阅读
- docker - 通过 kubernetes 将烧瓶容器连接到 redis 容器
- python - 如何比较两个数据框中的两列(一列包含另一列)
- php - Laravel 刀片路线在标题上显示方法
- asynchronous - NServiceBus 的自定义日志实现与 AsyncLocal 抛出异常
- javascript - php中的Morris.js条形图?
- amazon-web-services - 是否有用于轮换 AWS RDS 证书的文档?
- matplotlib - matplotlib:如何从直方图条中获取颜色(或 facecolor)?
- c# - 提供具有复杂设置配置的 Azure Web 应用
- ansible - no_device:是的,在使用 Ansible 创建 ami 时不起作用
- ruby-on-rails - 自动化生产页面创建