-1

任何人都在 Nodejs 中处理 XML 到 HTML 的转换,我得到“没有方法 'apply'”错误

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] 
4

2 回答 2

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);   
于 2014-12-16T06:17:08.120 回答
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);
}); 
于 2020-10-02T20:27:35.100 回答