Ich habe das Problem , das meine JSP bei der Antwort an den Client den XML-Daten Leerzeilen voranstellt.
Ich teste das alles lokal unter Eclipse , in dem Tomcat 5.5 mit dem Sysdeoplugin laeuft.
Mir würde es auch reichen die führenden Leerzeilen auszufiltern. Hab ueber 2 Stunden gegoogelt aber komme einfach nicht weiter.
die JSP :
RStoXML1 erstellt einen Baum aus einem Resultset.
Ich teste das alles lokal unter Eclipse , in dem Tomcat 5.5 mit dem Sysdeoplugin laeuft.
Mir würde es auch reichen die führenden Leerzeilen auszufiltern. Hab ueber 2 Stunden gegoogelt aber komme einfach nicht weiter.
die JSP :
Code:
<%
//System.out.println("start");
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch (Exception e) {
System.err.println("Treiber nicht gefunden");}
%>
<%
Iterator paramNames; // Namen der ueberg. Parameter
String city="",country="",param;
final String CITY="city",COUNTRY="country";
Connection con=null;
String help;
String []help1;
try{
con=DriverManager.getConnection("blah");
}catch(Exception e){System.err.println("Error connecting to DB");}
// save parameters
paramNames=(Iterator)request.getParameterNames();
try{
help=(String)paramNames.next();
if (help.equalsIgnoreCase(CITY))
{
help1=request.getParameterValues(help);
city=(String)help1[0];
}
else throw new Exception();
help=(String)paramNames.next();
if (help.equalsIgnoreCase(COUNTRY))
{
help1=request.getParameterValues(help);
country=(String)help1[0];
}
else throw new Exception();
}catch(Exception e){System.err.println("Malformed Parameters"+e);}
Statement stmt;
String query;
ResultSet rs;
stmt=con.createStatement();
float maxLatitude,minLatitude,maxLongitude,minLongitude;
// get coordinates from database
query="SELECT max(Latitude) FROM Pub WHERE CITY='"+city+"' AND COUNTRY='"+country+"'";
rs=stmt.executeQuery(query);
rs.next();
maxLatitude=rs.getFloat(1);
query="SELECT min(Latitude) FROM Pub WHERE CITY='"+city+"' AND COUNTRY='"+country+"'";
rs=stmt.executeQuery(query);
rs.next();
minLatitude=rs.getFloat(1);
query="SELECT max(Longitude) FROM Pub WHERE CITY='"+city+"' AND COUNTRY='"+country+"'";
rs=stmt.executeQuery(query);
rs.next();
maxLongitude=rs.getFloat(1);
query="SELECT min(Longitude) FROM Pub WHERE CITY='"+city+"' AND COUNTRY='"+country+"'";
rs=stmt.executeQuery(query);
rs.next();
minLongitude=rs.getFloat(1);
// Select pubs within the coordinates
query=("SELECT * From Pub WHERE (Latitude BETWEEN "+minLatitude+
" AND "+maxLatitude+" AND Longitude between "+minLongitude+
" AND "+maxLongitude)+")" ;
rs=stmt.executeQuery(query);
pubTools.RStoXML1 r=new pubTools.RStoXML1(rs,"pubs","pub.dtd");
Document doc1=r.build();
XMLOutputter out1=new XMLOutputter();
response.setContentType("text/xml");
System.out.println(gra);
out1.output(doc1,out);
%>
RStoXML1 erstellt einen Baum aus einem Resultset.
Code:
package pubTools;
import java.sql.*;
import org.jdom.*;
public class RStoXML1
{
private ResultSetMetaData rsmd;
private int columnCount;
private String rowName;
private Element root,rows,child;
DocType docType;
String [] columnNames;
ResultSet rs;
public RStoXML1(ResultSet rs,String rootElement,String docType)
{
try{
rsmd=rs.getMetaData();
columnCount=rsmd.getColumnCount();
rowName="pub"; //rsmd.getTableName(1);
System.out.println("rowName="+rowName);
columnNames=new String[columnCount];
for(int i=0;i<columnCount;i++)
{
columnNames[i]=rsmd.getColumnName(i+1);
}
root=new Element(rootElement);
this.docType=new DocType(rootElement,docType);
this.rs=rs;
}catch(SQLException e){System.err.println(e);}
}
public Document build(){
Document doc=new Document(root,docType);
try {
rs.next();
while(rs.next())
{
rows=new Element(rowName);
for(int i=1;i<=columnCount;i++)
{
System.out.println(i);
child=new Element(columnNames[i-1]);
child.setText(rs.getString(i));
rows.addContent(child);
}
root.addContent(rows);
}
}catch(SQLException e){System.err.println(e);}
return doc;
}
}