R
Remo
Gast
hi...ich habe das PRoblem das die Methode characters() vom SAX-Parser nicht bei jedem XML aufgerufen wird.
Hier mein Code:
Bei diesem XML (richtig mit test.dtd validiert) funktioniert die Ausgabe wunschgemäss:
Bei diesem XML (richtig mit methods.dtd validiert) jedoch nicht:
Beim zweiten XML geht er nie in die characters Methode. Beim ersten schon
Was mache ich falsch?
Gruss Remo
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