服务器向客户端输出XML格式的数据流

现在很多网站将数据或服务以web service的形式开放出来,也就是当用户提供一个带有参数的URL时,会获得以XML或以JSON格式返回的数据,这个其实很好做,在服务器端Servlet或JSP中使用request.getParameter获取参数后,然后进行逻辑运算,将返回结果封装成XML流,使用response返回到客户端即可,下面开始上代码:

PrintWriter out = response.getWriter();
String s_point = request.getParameter("s_point");
String e_point = request.getParameter("e_point");
String s_latlng[]= s_point.split(",");
String e_latlng[] = e_point.split(",");

//System.out.println(s_point+";"+e_point);
double s_lat = Double.parseDouble(s_latlng[0]);
double s_lng = Double.parseDouble(s_latlng[1]);
float s_f = Float.parseFloat(s_latlng[2]);

double e_lat = Double.parseDouble(e_latlng[0]);
double e_lng = Double.parseDouble(e_latlng[1]);
float e_f = Float.parseFloat(e_latlng[2]);
Node route_nodes[] = null;
Graph G = G = SmartLib.CreateGraph();

route_nodes = SmartLib.createRoute(G,s_lat, s_lng, s_f, e_lat, e_lng, e_f);
//使用DOM构建XML
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
Document dom = db.newDocument();

Element root = dom.createElement("lines");
dom.appendChild(root);
int i = 0;
int len = route_nodes.length;
while(i < len)
{
if(route_nodes[i].getLevel()<1.5)
{
Element line = dom.createElement("line");
line.setAttribute("floor", "1");
while(i<len&&route_nodes[i].getLevel()<1.5)
{
double lat = route_nodes[i].getLat();
double lng = route_nodes[i].getLng();
String p = lat+","+lng;
Element point = dom.createElement("point");
point.appendChild(dom.createTextNode(p));
line.appendChild(point);
i++;
}
root.appendChild(line);
continue;
}
else
{
Element line = dom.createElement("line");
line.setAttribute("floor", "2");
while(i<len && route_nodes[i].getLevel()>1.5)
{
double lat = route_nodes[i].getLat();
double lng = route_nodes[i].getLng();
String p = lat+","+lng;
Element point = dom.createElement("point");
point.appendChild(dom.createTextNode(p));
line.appendChild(point);
i++;
}
root.appendChild(line);
continue;
}
}


DOMSource source = new DOMSource(dom);
//System.out.println("source:"+source.toString());
TransformerFactory tff = TransformerFactory.newInstance();
Transformer tf = tff.newTransformer();
tf.setOutputProperty(OutputKeys.ENCODING, "utf-8");
tf.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result = new StreamResult(out);
tf.transform(source, result);


} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
out.println(e);
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
out.println(e);
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
out.println(e);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值