使用 LibXSLT 在 NodeJs 中将 XML 转换为 HTML(抛出没有方法"应用"错误)



有人在 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);
}); 

相关内容

  • 没有找到相关文章

最新更新