Xpages 使用SSJS创建xml文件
我想在服务器上使用SSJS创建一个xml文件。有没有办法做到这一点?任何人都可以给出在服务器上创建xml文件的示例代码。有很多方法。看起来最简单的方法是创建一个类似XML的字符串 下一个问题是JavaDOM类的使用。没有人能描述它 最后你可以用一点 让我们知道进展如何 更新:这将是我的@Michael代码示例版本:Xpages 使用SSJS创建xml文件,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我想在服务器上使用SSJS创建一个xml文件。有没有办法做到这一点?任何人都可以给出在服务器上创建xml文件的示例代码。有很多方法。看起来最简单的方法是创建一个类似XML的字符串 下一个问题是JavaDOM类的使用。没有人能描述它 最后你可以用一点 让我们知道进展如何 更新:这将是我的@Michael代码示例版本: <?xml version="1.0" encoding="UTF-8"?> <!-- XPage which is not rendered but return
<?xml version="1.0" encoding="UTF-8"?>
<!-- XPage which is not rendered but returns data like XML, JSON, etc. -->
<!-- More: http://www.wissel.net/blog/d6plinks/shwl-7mgfbn -->
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false">
<xp:this.beforeRenderResponse><![CDATA[#{javascript:try {
var out = facesContext.getOutputStream();
var exCon = facesContext.getExternalContext();
var response = exCon.getResponse(); // get the response context
// set content type, e.g. ...
response.setContentType("text/xml");
// set caching option
response.setHeader("Cache-Control", "no-cache");
// write XML output ...
var result = new biz.taoconsulting.xmltools.SimpleXMLDoc();
result.setOut(out);
result.openTag("result");
result.dateTag("created", new java.util.Date());
result.addSimpleTag("Author",@UserName);
result.openTag("FruitList");
result.addComment("Stephan really likes the fruits example");
var attributes = new java.util.HashMap();
attributes.add("name","Durian");
attributes.add("color","white");
attributes.add("taste","Don't ask");
result.addEmptyTag("fruit",attributes);
result.closeDocument();
// close the output
exCon.responseComplete();
out.close();
} catch (e) {
print(e.toString());
}}]]>
</xp:this.beforeRenderResponse>
</xp:view>
请注意此处的差异:
- 我使用beforeRenderResponse事件
- 访问outputStream而不是writer(在afterRenderResponse事件中无法访问流)
- 将响应设置为complete以停止页面的进一步输出,这样您就可以简单地在页面上键入注释,了解它的作用
- helper类的使用
<?xml version="1.0" encoding="UTF-8"?>
<!-- XPage which is not rendered but returns data like XML, JSON, etc. -->
<!-- More: http://www.wissel.net/blog/d6plinks/shwl-7mgfbn -->
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" rendered="false">
<xp:this.afterRenderResponse><![CDATA[#{javascript:try {
var writer = facesContext.getResponseWriter(), // get a writer object
response = facesContext.getExternalContext().getResponse(); // get the response context
// set content type, e.g. ...
response.setContentType("text/xml");
// set caching option
response.setHeader("Cache-Control", "no-cache");
// write XML output ...
writer.write(
'<?xml version="1.0"?>\n'
+ '<root>\n'
+ '<entity>Example Content</entity>\n'
+ '</root>\n'
);
// close the stream
writer.endDocument();
} catch (e) {
print(e.toString());
}}]]>
</xp:this.afterRenderResponse>
<xp:this.resources>
<xp:script src="/XBAN.jss" clientSide="false"></xp:script>
</xp:this.resources>
</xp:view>
只需将他的代码放入新创建的XPage并进行测试。修改
writer.write()
中的行以满足您的需要。几乎不错:-)-使用单独的write()语句并使用一些XML类(sax、dom)而不是字符串,而不是串接字符串。否则,当您不期望它的安全性时,编码会咬到您,Domino需要设置为使用UTF-8对HTTP输出进行编码,真正的解析肯定要好得多——但是如果您只需要在XML结构中传递一些简单的信息,那么不使用附加包就更容易了。还有一件事:如果您使用string-concat方法(尽管存在缺陷),那么使用Array.join()方法肯定比使用string+方法性能更好。。。