में XML आउटपुट के लिए इंडेंटेशन को दबाने के लिए कैसे करें XML आउटपुट के इंडेंटेशन को हटाने के लिए XQuery के भीतर से कोई तरीका है?XQuery
ईजी। कहो मेरे पास 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 के द्वारा किए गए दस्तावेज़ों के आधार पर, लेकिन एक्सएमएल आउटपुट कभी नहीं बदलता है।
मैं सैक्सन का उपयोग कर रहा हूं और जावा एक्सक्यूजे एक्सटेंशन के माध्यम से इसे कॉल कर रहा हूं;
import net.sf.saxon.xqj.SaxonXQDataSource;
क्या जावा में ऐसा नहीं है जो मुझे 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);
}
जहाँ तक मुझे पता है, मैं तो बस outputting हूँ जो कुछ सादे पाठ के रूप executeQuery()
से वापस आता है।
प्रोग्राम XQuery सर्वर के प्रकार के रूप में काम करता है। यह किसी विशिष्ट XQuery फ़ाइल के लिए HTTP क्लाइंट से अनुरोध के लिए एक विशिष्ट पोर्ट पर सुनता है। फिर वह उस फ़ाइल को लोड करता है और इसे सैक्सन को चलाने के लिए पास करता है, फिर सैक्सन से HTTP क्लाइंट को परिणाम आउटपुट करता है।
ऐसा करने का एक लंगड़ा तरीका है। बस अपने खुद के लेखक में respond.getWriter() को लपेटें जो लक्षित लेखक को लिखते समय \ t छोड़ देता है। हां, मुझे पता है कि यह सही तरीका नहीं है - लेकिन यह quickfix – SirVaulterScoff