首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SaxonJS on Node.js

SaxonJS on Node.js
EN

Stack Overflow用户
提问于 2018-06-22 08:49:42
回答 2查看 2K关注 0票数 1

我试图运行一个空的简单代码片段,在Windows10上测试NodeJSv8.11.1上的SaxonJS 1.1.0。

代码语言:javascript
复制
require('./Saxon-JS-1.1.0/SaxonJS.js');

但我发现了一个错误:

代码语言:javascript
复制
PS C:\XXX\sandbox\xsl-transformation> node main.js
C:\XXX\xsl-transformation\Saxon-JS-1.1.0\SaxonJS.js:17136
        setPlatform(JSTestDriver.platform);
                    ^
ReferenceError: JSTestDriver is not defined
at initialize (C:\XXX\sandbox\xsl-transformation\Saxon-JS-1.1.0\SaxonJS.js:17136:25)

查看源代码,我可以看到:

代码语言:javascript
复制
function initialize() {
    "use strict";
    if (inBrowser) {
        setPlatform(BrowserPlatform.platform);
        saxonPrint("Saxon-JS " + getProcessorInfo().productVersion + " in browser", 0);
    } else {
        // Currently only Nashorn. (Later need to distinguish from Node case)
        // Nashorn JSTestDriver
        setPlatform(JSTestDriver.platform);
        saxonPrint("Saxon-JS " + getProcessorInfo().productVersion + " in 
   Nashorn");

        // node NodePlatform
    }

    if (typeof platform.initialize === "function") {
        platform.initialize();
    }
}

似乎Node平台还没有实现。

但是,在文档中,它是这样写的:

我们主要讨论的是在浏览器中运行Saxon。然而,它也能够在服务器端的JavaScript环境中运行,比如Node.js (在这个版本中还没有完全支持)。

我深入搜索SaxonJS/NodeJS的代码片段,但没有找到。有人有SaxonJS在NodeJS上工作的代码片段吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-27 11:06:21

恐怕文件有点太仓促了。我们确实有一些用户报告说,这些代码可以在Node.js下运行,而且我们自己已经“在实验室”这样做了,但是它需要对发布的产品进行源代码调整。发布后,代码运行在两个平台上,即浏览器平台和Nashorn (在Nashorn下,它假设我们的测试工具没有发布)。

我们正在为Node.js开发一个版本。作为一个产品,正确地这样做需要很多浏览器版本中没有的功能,例如XML解析和序列化、调试支持、命令行接口和API等等。

票数 1
EN

Stack Overflow用户

发布于 2022-10-27 00:53:07

Node.js撒克逊Js指令

这个S/O问题是谷歌在"node.js撒克逊-js“中列出的第一个问题。所以,由于能见度问题,我要晚回答这个问题。

  1. 终端npm install saxon-js
  2. IDE
代码语言:javascript
复制
const saxonJs = require('saxon-js');
const fs = require('fs');

function transformDocument(source, destination, transformation, parameters) {
    var xml = fs.readFileSync(source).toString()
    var stylesheetParams = Object.getOwnPropertyNames(parameters)
    .map(o => `QName('', '${o}') : '${parameters[o]}'`).join(",")
    const html = saxonJs.XPath.evaluate(
        `transform(
            map { 
                'source-node' : parse-xml($xml), 
                'stylesheet-location' : $xslt, 
                'stylesheet-params': map {${stylesheetParams}}, 
                'delivery-format' : 'serialized' 
            }
        )?output`, 
        null, 
        {
            params : {
                'xml' : xml, 
                'xslt' : 'file:' + transformation
            } 
        }
    );
    fs.writeFileSync(destination, html)
}

参数

  • 来源: xml文件名
  • 目标:输出文件名
  • 转换: xsl文件名
  • 参数:包含xslt的任何参数的常规json对象

特征性

  • (-)极慢
  • 每次xslt文件更改时,(+)都不需要在命令行上运行
  • (+)在过去22年中基于xslt使用情况的易于使用的函数签名
  • (+)不会崩溃

备注

  • 我没有找到任何“开始”这件事。至少不是来自谷歌。我从多个S/O答案中拼凑出一个可行的解决方案。
  • 这花了我三个小时。我希望这样可以节省多个开发人员3个小时的时间。
  • 我试着让'source-location'使用file: url,但是没有bean
  • 当然,同步I/O是不必要的,它应该可以很好地处理异步函数和嵌套回调函数。然而,这并不是它“慢”的原因。由于某种原因,xpath transform()函数非常慢。
  • 由于某些原因,该解决方案是稳定的,不会崩溃。在Python中使用Saxon一直在崩溃,但事实并非如此。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50984147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档