有人在 Nodejs 中处理 XML 到 HTML 转换,我得到"没有方法'应用'"错误
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:WEBROOTDMwwwRoothellonode_modulesSimple_Server.js:151:42
at Layer.handle [as handle_request]
错误意味着您的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);
这种语法对我有用:
stylesheet.apply(doc, function(err, result){
console.log("result:",
result.toString().replace(/^<?xml version="1.0" encoding="UTF-8"?>s+/, "")
);
console.log("err:",err);
});