使用Node.js中的XSLT字符串将XML字符串[非文件!]转换为HTML
我有两条线 第一个是xml字符串,保存为字符串,而不是来自文件。 第二个是我从XSLT文件中加载的字符串,其中包含使用Node.js中的XSLT字符串将XML字符串[非文件!]转换为HTML,node.js,xml,xslt,electron,Node.js,Xml,Xslt,Electron,我有两条线 第一个是xml字符串,保存为字符串,而不是来自文件。 第二个是我从XSLT文件中加载的字符串,其中包含fs.readFile(…) 我已经尝试使用libxslt,但由于MSBuildTools等方面的一些错误,无法通过npm安装它 对于libxslt,是否有其他选择?我也遇到过xslt处理器,但它只接受文件作为参数 编辑1: 为了向您提供概述,可以在此处下载XSLT文件和示例XML文件(在应用程序中均作为字符串处理): 我不知怎么找到了解决问题的方法: 我现在使用xth库(通过
fs.readFile(…)
我已经尝试使用libxslt
,但由于MSBuildTools等方面的一些错误,无法通过npm
安装它
对于libxslt
,是否有其他选择?我也遇到过xslt处理器
,但它只接受文件作为参数
编辑1:
为了向您提供概述,可以在此处下载XSLT文件和示例XML文件(在应用程序中均作为字符串处理):
- 我现在使用
库(通过npm安装:xth
)npm I xth
- 将其导入我的函数:
var xth=require('xth')代码>
- 将xml字符串放入数据URI中:
var xml='data:text/xml',+encodeURIComponent(xmlString)代码>
- XSLT文件现在不是字符串,而是文件:
var xsl='./../components/ELGA_样式表_v1-0.xsl'代码>
- 然后,我只调用方法xth,如
1xth(xml、xsl、函数(html){ 2 html=html.replace(//g,“”); 4 html=html。替换(/&;/g,“&”); 5开放窗口(html); 6 });代码>
- 项目
是xslt转换的字符串,我有最后一个问题:在输出字符串的html
标记中,符号和&作为&lt>,及;这导致了问题。第2行到第4行是此问题的解决方法
- 我不知怎么找到了解决问题的方法:
openWindow(html)
是我自己在新的电子窗口中打开结果字符串的方法
注意:还有一个问题:如前所述,通过
中的#导航不起作用,因为Chromium不允许导航到数据uri的顶部框架。我不知何故找到了解决问题的方法:
xth
库(通过npm安装:npm I xth
)var xth=require('xth')代码>
var xml='data:text/xml',+encodeURIComponent(xmlString)代码>
var xsl='./../components/ELGA_样式表_v1-0.xsl'代码>
1xth(xml、xsl、函数(html){
2 html=html.replace(//g,“”);
4 html=html。替换(/&;/g,“&”);
5开放窗口(html);
6 });代码>
html
是xslt转换的字符串,我有最后一个问题:在输出字符串的
标记中,符号和&作为&lt>,及;这导致了问题。第2行到第4行是此问题的解决方法openWindow(html)
是我自己在新的电子窗口中打开结果字符串的方法
注意:还有一个问题:如前所述,通过
中的#导航不起作用,因为Chromium不允许导航到数据uri的顶部框架。免责声明:未测试附加的XML/XSLT
您可以使用:
这种方法可能并不完美(尤其是\u saxonBaseUri
hack),但我找不到更好的(用于saxon js
)在线文档(除了xslt3
基于命令行的方法)。免责声明:未针对附加的XML/XSLT进行测试
您可以使用:
这种方法可能并不完美(尤其是
\u saxonBaseUri
hack),但我在网上找不到更好的(用于saxon js
)文档(除了xslt3
基于命令行的方法)。您尝试过吗?它适用于输入字符串。免责声明:我没有使用它。现在试用,出现以下错误:Uncaught(in promise)错误:无法加载XSLT文档
-可能XSL太大了……您试过了吗?它适用于输入字符串。免责声明:我没有使用它。现在试用,出现以下错误:Uncaught(in promise)错误:无法加载XSLT文档
-可能XSL太大了。。。。
const saxon = require("saxon-js");
const env = saxon.getPlatform();
const doc = env.parseXmlFromString(yourStringXSLT);
// monkey-patch to avoid a "Required cardinality of value of parameter $static-base-uri is exactly one; supplied value is empty" compile error
doc._saxonBaseUri = "file:///";
const sef = saxon.compile(doc);
// you can save and reuse the SEF for future transforms, if applicable
const resultStringXML = saxon.transform({
stylesheetInternal: sef,
sourceText: yourStringXML
});