¿Hay alguna manera desde dentro de un XQuery de eliminar la indentación de la salida XML?Cómo suprimir la sangría para la salida XML en XQuery
Ej. dicen que tuve un XQuery de;
<foo><bar/></foo>
produciendo un documento de resultado XML de;
<foo>
<bar/>
</foo>
¿Cómo puedo eliminar las sangrías por lo que el documento de salida se veía así;
<foo>
<bar/>
</foo>
Idealmente quiero algo que pueda controlar con XQuery, por ejemplo. en las declaraciones al inicio de la consulta. Intenté poner cosas como esta en XQuery;
declare namespace saxon="http://saxon.sf.net/";
declare option saxon:output "indent=no";
Y muchas otras variaciones de las anteriores dependiendo de la documentación que Google arroje, pero la salida XML nunca cambia.
Estoy usando Saxon y lo llamo a través de las extensiones Java XQJ;
import net.sf.saxon.xqj.SaxonXQDataSource;
es algo que tendría que hacer en Java no Xquery?
actualización
Este es el código que estoy usando para llamar sajón. Lamento que haya bastante, pero no estoy seguro de qué será relevante;
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();
}
Lo anterior se llama así;
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);
}
Por lo que yo sé, yo soy sólo la salida de lo que viene detrás de executeQuery()
como texto sin formato.
El programa funciona como una especie de servidor XQuery. Escucha en un puerto específico una solicitud de un cliente HTTP para un archivo XQuery específico. A continuación, carga ese archivo y lo pasa a Saxon para que se ejecute, y luego envía el resultado de Saxon al cliente HTTP.
Hay una manera coja de hacer esto. Simplemente ajuste el response.getWriter() en su propia grabadora que se salta \ t mientras escribe al escritor de destino. Sí, sé que no es una forma correcta, pero es quickfix – SirVaulterScoff