Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpages 使用SSJS创建xml文件_Xpages_Xpages Ssjs - Fatal编程技术网

Xpages 使用SSJS创建xml文件

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

我想在服务器上使用SSJS创建一个xml文件。有没有办法做到这一点?任何人都可以给出在服务器上创建xml文件的示例代码。

有很多方法。看起来最简单的方法是创建一个类似XML的字符串

下一个问题是JavaDOM类的使用。没有人能描述它

最后你可以用一点

让我们知道进展如何

更新:这将是我的@Michael代码示例版本:

<?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类的使用
当您阅读helper类的源代码时,有什么看起来有点奇怪:为什么不在构造函数中使用输出流,这样您就不会错过它今天我想用它添加第二个构造函数,但是无参数构造函数允许我将该类定义为托管bean(如果我喜欢的话)。

要像@Stefan建议的那样以字符串形式“呈现”XML,我将使用XAgent方法:

<?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+方法性能更好。。。