有没有一种方法可以在XQuery中取消XML输出的缩进?
例如,假设我有一个XQuery:
生成一个XML结果文档;
我该如何去除缩进,让输出文档看起来像这样:
理想情况下,我希望能够从XQuery本身进行控制,例如在查询开头的声明中。我尝试将如下内容放入XQuery中:
上述内容被称为这样:
据我所知,我只是将
该程序作为一种XQuery服务器工作。它在特定端口监听来自HTTP客户端的对特定XQuery文件的请求。然后加载该文件并将其传递给Saxon运行,最终将Saxon的结果输出回HTTP客户端。
例如,假设我有一个XQuery:
<foo><bar/></foo>
生成一个XML结果文档;
<foo>
<bar/>
</foo>
我该如何去除缩进,让输出文档看起来像这样:
<foo>
<bar/>
</foo>
理想情况下,我希望能够从XQuery本身进行控制,例如在查询开头的声明中。我尝试将如下内容放入XQuery中:
declare namespace saxon="http://saxon.sf.net/";
declare option saxon:output "indent=no";
根据谷歌提供的文档,还有其他几种变体,但XML输出永远不会改变。
我正在使用Saxon,并通过Java XQJ扩展进行调用。
import net.sf.saxon.xqj.SaxonXQDataSource;
这是否是我需要在Java中操作而不是Xquery中进行的操作?
更新
这是我用来调用Saxon的代码。很抱歉这有点长,但我不确定哪些部分是相关的。
private String runXQuery(String query, HttpServletRequest request, String payload)
throws XQException {
XQDataSource ds = new SaxonXQDataSource();
XQConnection conn = ds.getConnection();
XQPreparedExpression exp = conn.prepareExpression(query);
bindObject(exp, "HTTP_METHOD", request.getMethod());
bindObject(exp, "HTTP_URI", request.getRequestURI());
bindObject(exp, "HTTP_QUERY", request.getQueryString());
bindObject(exp, "HTTP_COOKIES", request.getHeader("Cookie"));
bindObject(exp, "HTTP_PAYLOAD", payload);
XQResultSequence result = exp.executeQuery(); // Run the XQuery.
StringBuffer buffer = new StringBuffer();
while (result.next()) {
buffer.append(result.getItemAsString(null));
buffer.append(System.getProperty("line.separator"));
}
return buffer.toString();
}
上述内容被称为这样:
public void handle(String target, Request baseRequest, HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
response.setContentType("text/html;charset=utf-8");
baseRequest.setHandled(true);
File file = null;
String out = "";
File inbound = new File(root, target); // File or folder
file = checkFile(inbound); // File.
String xquery = loadFile(file);
String payload = getPayload(request.getReader());
out = runXQuery(xquery, request, payload);
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println(out);
}
据我所知,我只是将
executeQuery()
返回的内容作为纯文本输出。该程序作为一种XQuery服务器工作。它在特定端口监听来自HTTP客户端的对特定XQuery文件的请求。然后加载该文件并将其传递给Saxon运行,最终将Saxon的结果输出回HTTP客户端。