如何在XQuery中抑制XML输出的缩进

Nig*_*ton 7 java xml xquery saxon indentation

是否有一种方法可以从XQuery中删除XML输出的缩进?

例如.说我有一个XQuery;

<foo><bar/></foo>
Run Code Online (Sandbox Code Playgroud)

生成XML结果文档;

<foo>
  <bar/>
</foo>
Run Code Online (Sandbox Code Playgroud)

如何删除缩进以使输出文档看起来像这样;

<foo>
<bar/>
</foo>
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要一些我可以用XQuery本身控制的东西,例如.在查询开头的声明中.我试过把这样的东西放在XQuery中;

declare namespace saxon="http://saxon.sf.net/";
declare option saxon:output "indent=no";
Run Code Online (Sandbox Code Playgroud)

以上的其他几种变体取决于Google引发的文档,但XML输出永远不会改变.

我正在使用Saxon并通过Java XQJ扩展调用它;

import net.sf.saxon.xqj.SaxonXQDataSource;
Run Code Online (Sandbox Code Playgroud)

这是我在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();

}
Run Code Online (Sandbox Code Playgroud)

上面这样称呼;

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);

}
Run Code Online (Sandbox Code Playgroud)

据我所知,我只是输出从executeQuery()纯文本中回来的东西.

该程序作为一种XQuery服务器.它侦听特定端口,以获取来自HTTP客户端的特定XQuery文件的请求.然后它加载该文件并将其传递给Saxon运行,然后将Saxon的结果输出回HTTP客户端.

Mic*_*Kay 0

这里出了什么问题并不明显。但您还没有解释如何生成输出。您究竟如何在 XQJ 中运行查询,以及将其输出发送到哪里?(根据您提供的信息,序列化可能甚至不是由查询处理器完成的 - 例如,您可能将输出写入 DOM,然后序列化 DOM。)