使用LibXSLT在NodeJs中将XML转换为HTML(throws没有方法'apply'错误)

时间:2014-12-15 23:10:00

标签: xml node.js xslt libxslt

任何人都在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] 

2 个答案:

答案 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);
});