java-forum.org
JBoss Seam
Alter Preis: 39,95 €
Jetzt: 0,00 €

zzgl. Versandkosten

Zurück   java-forum.org > Java - Programmierung > XML und Co.

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 18.10.2005, 14:33   #1 (permalink)
Remo
Inkognito
 
Beiträge: n/a
Standard Problem mit SAX-Parser characters()

hi...ich habe das PRoblem das die Methode characters() vom SAX-Parser nicht bei jedem XML aufgerufen wird.
Hier mein Code:

Code:
package ch.swisslife.prov.bp.ejbtestclient.service;

import java.io.FileReader;

import javax.xml.parsers.SAXParser;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class TestReaderHandler extends DefaultHandler {

	public static void main(String args[]) throws Exception {
		args = new String[1];
		args[0] = "test.xml";
		
		XMLReader xr = new org.apache.xerces.parsers.SAXParser();
		TestReaderHandler handler = new TestReaderHandler();
		xr.setContentHandler(handler);
		xr.setErrorHandler(handler);

		// Parse each file provided on the
		// command line.
		for (int i = 0; i < args.length; i++) {
			FileReader r = new FileReader(args[i]);
			xr.parse(new InputSource(r));
		}
	}

	public TestReaderHandler() {
		super();
	}

	////////////////////////////////////////////////////////////////////
	// Event handlers.
	////////////////////////////////////////////////////////////////////

	public void startDocument() {
		System.out.println("Start document");
	}

	public void endDocument() {
		System.out.println("End document");
	}

	public void startElement(String uri, String name, String qName,
			Attributes atts) {
		if ("".equals(uri))
			System.out.println("Start element: " + qName);
		else
			System.out.println("Start element: {" + uri + "}" + name);
	}

	public void endElement(String uri, String name, String qName) {
		if ("".equals(uri))
			System.out.println("End element: " + qName);
		else
			System.out.println("End element:   {" + uri + "}" + name);
	}

	public void characters(char ch[], int start, int length) {
		System.out.print("Characters:    \"");
		for (int i = start; i < start + length; i++) {

			switch (ch[i]) {
			case '\\':
				System.out.print("\\\\");
				break;
			case '"':
				System.out.print("\\\"");
				break;
			case '\n':
				System.out.print("\\n");
				break;
			case '\r':
				System.out.print("\\r");
				break;
			case '\t':
				System.out.print("\\t");
				break;
			default:
				System.out.print(ch[i]);
				break;
			}
		}
		System.out.print("\"\n");
	}

}

Bei diesem XML (richtig mit test.dtd validiert) funktioniert die Ausgabe wunschgemäss:
Code:
<?xml version="1.0"?>
<!DOCTYPE poem SYSTEM "Z:\PROV\EJBTestClient\test.dtd">
<poem xmlns="http://www.megginson.com/ns/exp/poetry">
	<title>Roses are Red</title>
	<l>Roses are red,</l>
	<l>Violets are blue;</l>
	<l>Sugar is sweet,</l>
	<l>And I love you.</l>
</poem>
Bei diesem XML (richtig mit methods.dtd validiert) jedoch nicht:
Code:
<?xml version="1.0"?>
<!DOCTYPE Methodenfile SYSTEM "Z:\PROV\EJBTestClient\methods.dtd">
<Methodenfile name="methoden">
	<Methode name="hasProvisionsabrechnung" returntyp="java.lang.Boolean">
		<Parameter name="GPNR" datentyp="java.lang.Integer"/>
		<Parameter name="Monat" datentyp="java.lang.Integer"/>
		<Parameter name="Jahr" datentyp="java.lang.Integer"/>
	</Methode>
	<Methode name="getProvisionsabrechnung" returntyp="ch.swisslife.util.MimeDocument">
		<Parameter name="GPNR" datentyp="java.lang.Integer"/>
		<Parameter name="Monat" datentyp="java.lang.Integer"/>
		<Parameter name="Jahr" datentyp="java.lang.Integer"/>
	</Methode>
	<Methode name="getEVVertrag" returntyp="ch.swisslife.prov.bp.bom.PROVEVVertrag">
		<Parameter name="VertragNR" datentyp="java.lang.String"/>
		<Parameter name="Sprache" datentyp="java.lang.String"/>
		<Parameter name="GPNR" datentyp="java.lang.Integer"/>
	</Methode>
	<Methode name="getEinmaligeProvisionenZuEVVertrag" returntyp="java.util.List">
		<Parameter name="VertragNR" datentyp="java.lang.String"/>
		<Parameter name="Sprache" datentyp="java.lang.String"/>
		<Parameter name="GPNR" datentyp="java.lang.Integer"/>
	</Methode>
	<Methode name="getPROVEVKontoZuBrokerFirma" returntyp="java.util.List">
		<Parameter name="Monat" datentyp="java.lang.Integer"/>
		<Parameter name="Jahr" datentyp="java.lang.Integer"/>
		<Parameter name="Sprache" datentyp="java.lang.String "/>
		<Parameter name="GPNR" datentyp="java.lang.Integer"/>
	</Methode>
</Methodenfile>
Beim zweiten XML geht er nie in die characters Methode. Beim ersten schon
Was mache ich falsch?

Gruss Remo
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 18.10.2005, 14:40   #2 (permalink)
Stammbenutzer
Floppy Disc
 
Registriert seit: 29.08.2005
Beiträge: 801
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Hi,

nix. Ist korrekt so. Schon mal in die Attributes bei startElement(...) geschaut ?

Gruß
Mag1c
Mag1c ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 18.10.2005, 14:44   #3 (permalink)
Remo
Inkognito
 
Beiträge: n/a
beim ersten XML File sieht die Ausgabe so aus:
Code:
Start document
Start element: {http://www.megginson.com/ns/exp/poetry}poem
Start element: {http://www.megginson.com/ns/exp/poetry}title
Characters:    "Roses are Red"
End element:   {http://www.megginson.com/ns/exp/poetry}title
Start element: {http://www.megginson.com/ns/exp/poetry}l
Characters:    "Roses are red,"
End element:   {http://www.megginson.com/ns/exp/poetry}l
Start element: {http://www.megginson.com/ns/exp/poetry}l
Characters:    "Violets are blue;"
End element:   {http://www.megginson.com/ns/exp/poetry}l
Start element: {http://www.megginson.com/ns/exp/poetry}l
Characters:    "Sugar is sweet,"
End element:   {http://www.megginson.com/ns/exp/poetry}l
Start element: {http://www.megginson.com/ns/exp/poetry}l
Characters:    "And I love you."
End element:   {http://www.megginson.com/ns/exp/poetry}l
End element:   {http://www.megginson.com/ns/exp/poetry}poem
End document
Beim zweiten (welches nicht richtig funktioniert)
Code:
Start document
Start element: Methodenfile
Start element: Methode
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
End element: Methode
Start element: Methode
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
End element: Methode
Start element: Methode
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
End element: Methode
Start element: Methode
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
End element: Methode
Start element: Methode
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
Start element: Parameter
End element: Parameter
End element: Methode
End element: Methodenfile
End document
Wie man sieht werden beim ersten die System.out's in der Methode characters ausgegeben, beim zweiten jedoch nicht
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 18.10.2005, 14:46   #4 (permalink)
Remo
Inkognito
 
Beiträge: n/a
wie meinste das? was müsste in den Attributs sein?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 18.10.2005, 15:04   #5 (permalink)
Stammbenutzer
Floppy Disc
 
Registriert seit: 29.08.2005
Beiträge: 801
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Schau doch einfach mal nach :

Code:
for (int i=0; i < atts.getLength(); i++) {
    System.out.println("QName: "+atts.getQName(i));
    System.out.println("Value: "+atts.getValue(i));
}
Gruß
Mag1c
Mag1c ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 18.10.2005, 15:11   #6 (permalink)
Remo
Inkognito
 
Beiträge: n/a
Wenn ich das erste XML-File verwende ist Attribute leer

beim zweiten hat es folgende Werte:
Code:
QName: name
Value: methoden
Start element: Methodenfile
QName: name
Value: hasProvisionsabrechnung
QName: returntyp
Value: java.lang.Boolean
Start element: Methode
QName: name
Value: GPNR
QName: datentyp
Value: java.lang.Integer
...

etc....
hmm...warum steht beim ersten nichts drin?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 18.10.2005, 15:45   #7 (permalink)
Stammbenutzer
Floppy Disc
 
Registriert seit: 29.08.2005
Beiträge: 801
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
weil

<tag>value</tag>

was anderes ist als

<tag attrib="value"></tag>

bzw. dessen Kurzform

<tag attrib ="value"/>

Lies mal eine Einführung/Tutorial zu XML.

Gruß
Mag1c
Mag1c ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 18.10.2005, 15:46   #8 (permalink)
Remo
Inkognito
 
Beiträge: n/a
okay

Danke für die Hilfe

Gruss Remo
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Lesezeichen

Latex Maths & Physics Editor ...

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Characters in int[] Array einlesen und wieder ausgeben flosi Java Basics - Anfänger-Themen 5 19.05.2007 14:53
XML Parser Problem Grammi XML und Co. 0 17.12.2006 21:47
SAX - characters() Fraiser XML und Co. 3 25.08.2006 12:49
Noch ein Parser Problem J-O-E Java Basics - Anfänger-Themen 7 06.04.2006 20:14
Problem beim Parsen mit swinghtml parser, handle text,. geckoo AWT, Swing & SWT 0 16.05.2005 20:48


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:16 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de