任何人都在Nodejs中使用XML转换为HTML,Iam得到"没有方法'应用'"错误
var fs = require('fs');
var libxslt = require('libxslt');
var libxmljs = require('libxmljs');
var docSource = fs.readFileSync('Hello.xml', 'utf8');
var stylesheetSource = fs.readFileSync('Hello.xsl', 'utf8');
var stylesheet = libxmljs.parseXml(stylesheetSource);
var result = stylesheet.apply(docSource);
res.end(result);
错误:
TypeError: Object <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/hello-world"><HTML><HEAD><TITLE/></HEAD><BODY><H1><xsl:value-of select="greeting"/></H1>hello</BODY></HTML> </xsl:template>
</xsl:stylesheet>
has no method 'apply'
at C:\WEBROOT\DM\wwwRoot\hello\node_modules\Simple_Server.js:151:42
at Layer.handle [as handle_request]
答案 0 :(得分:1)
错误表示您的stylesheet.apply(docSource)
失败,因为stylesheet
没有该方法。查看the docs for xslt
可以清楚地表明.apply
的结果为libxslt.parse
,而不是libxmljs.parseXml
的结果。所以你需要这样做:
var fs = require('fs');
var libxslt = require('libxslt');
var libxmljs = require('libxmljs');
var docSource = fs.readFileSync('Hello.xml', 'utf8');
var stylesheetSource = fs.readFileSync('Hello.xsl', 'utf8');
var stylesheetObj = libxmljs.parseXml(stylesheetSource);
var doc = libxmljs.parseXml(docSource);
var stylesheet = libxslt.parse(stylesheetObj);
var result = stylesheet.apply(doc);
res.end(result);
答案 1 :(得分:0)
此语法对我有用:
stylesheet.apply(doc, function(err, result){
console.log("result:",
result.toString().replace(/^<\?xml version="1\.0" encoding="UTF-8"\?>\s+/, "")
);
console.log("err:",err);
});