# leading whitespaces nach einem XMLOutputter



## spielerz (14. Dez 2006)

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 :


```
<%
//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. 

```
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;
	}
}
```


----------



## EOB (14. Dez 2006)

ist dein problem, dass du nicht weisst, WIE dir lerrzeichen abzutrenne sind, oder das du nicht weisst WO sie angehaengt werden?

gruesse


----------



## The_S (14. Dez 2006)

Leerzeichen filtert man mit String#trim weg.


----------



## spielerz (14. Dez 2006)

ich weiss weder das eine noch das andere. Schöner wärs natürlich wenn die gar nicht erst reinkämen, aber mir würds halt auch reichen wenn ich sie wieder rausbekomme.
Ich hab versucht alle Elemente zu trimmen ( hatte nichts gebracht). 
XMLOutput(Format.getCompactFormat) hatte auch keinen Effekt.


----------



## EOB (14. Dez 2006)

trim schneidet aber nur das jeweils erste und letzte ab. wenns mehr sind, wuerd ich sowas nehmen:


```
string.replaceAll("(^ +)|( +$)", "");
```

gruesse


----------



## spielerz (14. Dez 2006)

naja ich geb halt keinen String sondern eine Bytestream aus.


----------



## The_S (15. Dez 2006)

Mørketid hat gesagt.:
			
		

> trim schneidet aber nur das jeweils erste und letzte ab



Wer hat dir denn den scheiß erzählt?

@spielerz

In welcher Form liegt dir denn der Output vor, bevor du ihn schreibst?


----------



## spielerz (15. Dez 2006)

ich hab nochmal die komplettte JSP reingemacht. Also ich mache aus einem Resultset eine JDOM Document und das schicke ich ueber den XMLOutputter


----------



## The_S (15. Dez 2006)

Sry, mit JDom habe ich noch nichts gemacht. Kann dir da also nicht weiterhelfen. Evtl. kann es ja jemand anderes  .


----------



## spielerz (15. Dez 2006)

ich glaube allerdings eher nicht das die Leerzeilen in der RStoXML1 Methode dareinkommen- kanns evt an Tomcat liegen ?


----------

