Esiste un modo all'interno di un XQuery per rimuovere il rientro del output XML?Come sopprimere l'indentazione per l'output XML in XQuery
Es. dire che ho avuto un XQuery di;
<foo><bar/></foo>
produzione di un documento di risultato XML di;
<foo>
<bar/>
</foo>
Come rimuovere i rientri in modo che il documento di output fosse simile al seguente;
<foo>
<bar/>
</foo>
Idealmente, desidero qualcosa con cui posso controllare XQuery es. nelle dichiarazioni all'inizio della query. Ho provato a inserire cose come questa in XQuery;
declare namespace saxon="http://saxon.sf.net/";
declare option saxon:output "indent=no";
E molte altre varianti di quanto sopra a seconda della documentazione di Google, ma l'output XML non cambia mai.
sto usando sassone e chiamando tramite le estensioni Java XQJ;
import net.sf.saxon.xqj.SaxonXQDataSource;
E 'qualcosa che avrei dovuto fare in Java non query XQuery?
Aggiornamento
Questo è il codice che sto usando per chiamare sassone. Mi dispiace che ce ne sia un bel po 'ma non sono sicuro di cosa sarà rilevante;
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();
}
Quanto sopra è chiamato così;
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);
}
Per quanto ne so, io sono solo l'output di tutto ciò che torna dal executeQuery()
come testo normale.
il programma funziona come una sorta di server di XQuery. Ascolta su una porta specifica per una richiesta da un client HTTP per un file XQuery specifico. Quindi carica quel file e lo passa a Saxon per l'esecuzione, quindi restituisce il risultato da Saxon al client HTTP.
C'è un modo zoppo di farlo. È sufficiente avvolgere response.getWriter() nel proprio writer che salta \ t durante la scrittura nel writer di destinazione. Sì, lo so che non è un modo corretto - ma è quickfix – SirVaulterScoff