Как подавить отступы для вывода XML в XQuery

Есть ли способ изнутри XQuery удалить отступ в выводе XML?

Например. скажем, у меня был 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";

и несколько других вариантов вышеизложенного в зависимости от того, какую документацию предлагает Google, но вывод XML никогда не меняется.

Я использую Saxon и вызываю его через расширения Java XQJ;

import net.sf.saxon.xqj.SaxonXQDataSource;

Это что-то, что мне нужно делать в Java, а не в Xquery?

Обновление

Это код, который я использую для вызова Саксонский. Прошу прощения, их довольно много, но я не уверен, что будет иметь отношение к делу;

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-клиенту.

7
задан Nigel Alderton 6 October 2011 в 12:24
поделиться