Есть ли способ из 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-клиент.