Hallo! Ich verwende folgenden Code um Mannschaften aus einem XML-File zu lesen:
Und so siehts das XML-File dazu aus:
Aber er will nicht ... er hat wohl ein Problem mit den Umlauten. Könnt ihr mir sagen wie ich es hinkriege, daß er Umlaute mag und mir nicht die Exception wirft?
Hier noch mal die komplette Fehler-Ausgabe:
Java:
// ****************************************************************************
// **
// ** DataLoaderWriterXML.java
// ** Description
// **
// ****************************************************************************
package de.fussballmanager.io;
// ============================================================================
// IMPLEMENTATION REQUIRED IMPORTS
// ============================================================================
import de.fussballmanager.data.Mannschaft;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;
import java.io.IOException;
import java.util.List;
import java.util.LinkedList;
// ============================================================================
// IMPLEMENTATION CLASS BODY
// ============================================================================
public class DataLoaderWriterXML {
// ========================================================================
// IMPLEMENTATION PRIVATE CONSTANTS
// ========================================================================
// ========================================================================
// IMPLEMENTATION PUBLIC CONSTANTS
// ========================================================================
// ========================================================================
// IMPLEMENTATION PRIVATE DATA
// ========================================================================
private static DataLoaderWriterXML instance;
private static DocumentBuilderFactory domFactory;
private static DocumentBuilder builder;
// ========================================================================
// IMPLEMENTATION PUBLIC DATA
// ========================================================================
// ========================================================================
// IMPLEMENTATION PRIVATE METHODS
// ========================================================================
// private constructor to make this class a singleton
private DataLoaderWriterXML() throws ParserConfigurationException {
domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
builder = domFactory.newDocumentBuilder();
}
// performs an xpath query on a file
private NodeList performQueryOnFile(String fileName, String query)
throws IOException, SAXException, XPathExpressionException {
Document doc = builder.parse(fileName);
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
XPathExpression expr = xpath.compile(query);
Object result = expr.evaluate(doc, XPathConstants.NODESET);
return (NodeList) result;
}
// ========================================================================
// IMPLEMENTATION PUBLIC METHODS
// ========================================================================
// method to obtain an instance of this class
public static DataLoaderWriterXML getInstance() {
if (instance == null) {
try {
instance = new DataLoaderWriterXML();
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
}
}
return instance;
}
// method to load mannschaften from xml file
public List<Mannschaft> loadMannschaften(String fileName) {
List<Mannschaft> mannschaftenListe = new LinkedList<Mannschaft>();
try {
NodeList nodes = performQueryOnFile(fileName,
"//mannschaften/mannschaft");
if (nodes != null && nodes.getLength() > 0) {
for (int i = 0; i < nodes.getLength(); i++) {
Element mannschaft = (Element) nodes.item(i);
mannschaftenListe.add(new Mannschaft(
mannschaft.getAttribute("name")));
}
}
} catch (SAXException se) {
se.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (XPathExpressionException xpe) {
xpe.printStackTrace();
}
return mannschaftenListe;
}
}
// ****************************************************************************
// **
// ** DataLoaderWriterXML.java
// **
// ****************************************************************************
Und so siehts das XML-File dazu aus:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<saison>
<mannschaften>
<mannschaft name="VfL Wolfsburg"/>
<mannschaft name="FC Bayern München"/>
<mannschaft name="VfB Stuttgart"/>
<mannschaft name="Hertha BSC"/>
<mannschaft name="Hamburger SV"/>
<mannschaft name="Borussia Dortmund"/>
<mannschaft name="1899 Hoffenheim"/>
<mannschaft name="FC Schalke 04"/>
<mannschaft name="Bayer 04 Leverkusen"/>
<mannschaft name="Werder Bremen"/>
<mannschaft name="Hannover 96"/>
<mannschaft name="1. FC Köln"/>
<mannschaft name="Eintracht Frankfurt"/>
<mannschaft name="VfL Bochum 1848"/>
<mannschaft name="Borussia M'gladbach"/>
<mannschaft name="SC Freiburg"/>
<mannschaft name="1. FSV Mainz 05"/>
<mannschaft name="1. FC Nürnberg"/>
</mannschaften>
</saison>
Aber er will nicht ... er hat wohl ein Problem mit den Umlauten. Könnt ihr mir sagen wie ich es hinkriege, daß er Umlaute mag und mir nicht die Exception wirft?
Hier noch mal die komplette Fehler-Ausgabe:
Code:
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanLiteral(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLScanner.scanAttributeValue(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanAttribute(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at de.fussballmanager.io.DataLoaderWriterXML.performQueryOnFile(DataLoaderWriterXML.java:62)
at de.fussballmanager.io.DataLoaderWriterXML.loadMannschaften(DataLoaderWriterXML.java:89)
at de.fussballmanager.start.Fussballmanager.run(Fussballmanager.java:35)
at de.fussballmanager.start.Fussballmanager.main(Fussballmanager.java:82)