# XML parsen in Bean



## skueter (23. Sep 2004)

Hallo,
ich habe ein Problem beim parsen einer XML-Datei. In einer Webanwendung parse ich in einer Bean eine XML-Datei. Aber leider macht er das nicht wie in einer Standalone-Anwendung. Dort funktioniert das Prog ohne Probleme. Hier mal der Code der Bean. Unten noch mal die Files zum Download.


```
package meineBeans;

import java.io.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
import org.xml.sax.*;

public class parsen extends DefaultHandler
{
	private String pfad, datei = "";
	String html = "";
	
	public String parsen()
	{
		DefaultHandler handler = new parsen();
		File file = new File(pfad+datei);
		boolean laden=file.canRead();

		if (laden==true)
		{
			try
			{
				SAXParserFactory factory = SAXParserFactory.newInstance();
				html=html+"A"; //Nur zu Test zwecken
				SAXParser saxParser = factory.newSAXParser();
				html=html+"b"; //Nur zu Test zwecken
				saxParser.parse(file,handler);    //Hier muss der Fehler liegen
				html=html+"C"; //Nur zu Test zwecken
			}
			catch (Throwable t)
			{
				t.printStackTrace();
				html=html+"d"; //Nur zu Test zwecken
			}
		}
		else
		{
			html=html+"E"; //Nur zu Test zwecken
		}		
		return (html);
	}
	
	public void setPfad(String param)
	{
		this.pfad=param;
	}
	
	public void setDatei(String param)
	{
		this.datei=param;
	}
	
	public void startElement(String namespaceURI, String sName, String qName, Attributes attrs)
	{
		String attributName=new String("");
		String attribute=new String("");
		String tagElement=new String("");

		int i;

		html=html+"F"; //Nur zu Test zwecken
		if (attrs.getLength() >=1)
		{
			for (i = 0; i < attrs.getLength(); i++)
			{
				attributName = attrs.getQName(i);
				attribute=attribute+" "+attributName+"='"+attrs.getValue(i)+"'";
			}
			attribute=" "+attribute;
		}
		
		tagElement="<"+qName+attribute+">";
		ausgabe(tagElement);
	}
	
	public void endElement(String namespaceURI, String sName, String qName)
	{
		ausgabe("</"+qName+">");
		html=html+"G"; //Nur zu Test zwecken
	}
	
	public void characters(char[] ch, int start, int length)
	{
		String str = new String(ch, start, length);
		ausgabe(str);
		html=html+"H"; //Nur zu Test zwecken
	}
	
	public void ausgabe(String s)
	{
		System.out.println(s);
	}
}
```

Hier noch meine jsp.file und meine xml-file

```
<jsp:useBean id="pars" class="meineBeans.parsen"/>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
</head>
<body>

<h1>News</h1>
<%
	pars.setPfad(getServletContext().getRealPath("\\"));
	pars.setDatei("news.xml");
	out.println(pars.parsen());
%>



</form>

</body>
</html>
```


```
<?xml version="1.0" encoding="iso-8859-1"?>

<news>

<aufzaehlung>

<datum>02.11.2022</datum>

<text>Der Netscape-Browser erscheint in der neuen Version 8.9. Verbessert wurde u.a. die Performance und Stabilität des Browsers. </text>

</aufzaehlung>

<aufzaehlung>

<datum>01.11.2022</datum>

<text> Microsoft bringt eine neue XML-API unter dem Namen "Internet Explorer for XML Processing XP edition only" heraus. Diese Fassung arbeitet nur mit den Windows-XP-Versionen zusammen.</text>

</aufzaehlung>

<aufzaehlung>

<datum>30.10.2022</datum>

<text> Der XML-Parser doXMLing erscheint in der Update-Version 5.3.2 rev. 17.98. Gegenüber der Vorversion wurden einige Bugs behoben. </text>

</aufzaehlung>

</news>
```

Hier noch mal die Files zum Download
http://www.sven-kueter.de/jsp.rar
http://www.sven-kueter.de/purejava.rar


----------



## foobar (23. Sep 2004)

Was funktioniert denn nicht? Fehlermeldung?

BTW
1. Java Beans müssen Serializable implementieren
2. Klassenbezeichner sollten mit einem Großbuchstaben beginnen


----------



## skueter (23. Sep 2004)

Fehlermeldung gibt es keine.

Das Problem ist das er mir immer nur AbC ausgibt und somit anscheinend nicht auf die anderen Methoden zugreift. 
Aber in der stdout.log steht durch

```
public void ausgabe(String s)
	{
		System.out.println(s);
	}
```
die gesamte geparste XML-File. Also müsste er mir dann nicht dann auch FGH ausgeben? Er parst es ja und greift somit auch auf die anderen Methoden zu.


----------

