Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Kurz zu meinem Problem:
Ich beziehe aus dem Internet eine XML-Datei. Ich habe dabei eh nur lesenden Zugriff und will/kann also auch keine Manipulation an der Datei vornehmen.
So.
Nachdem ich das XML Dokument gedownloadet habe muss ich Objekte daraus "herausziehen" damit ich diese in meiner GUI verwenden kann.
ArrayList<Spieler> spieler = ArrayList<Spieler>();
die sich sich herausgezogenen Spieler aus der XML-Datei in dieser ArrayList merkt.
Welches Wekzeug würdet ihr mir empfehlen?
Bei den ganzen für mich verwirrenden XML Parsern werde ich nicht wirklich schlau. Zumal ich kein vernünftiges Beispiel/Tutorial finden kann für mein Problem.
Zur Erinnerung: Die XML Daten werden nicht weiter bearbeitet. Es sollen nur Objekte daraus erstellt werden.
Für dein Anliegen wird JAXB wohl das beste sein. Du musst nur entsprechende Objekte definieren und ein paar Zusatzinformationen annotieren, dann kannst du die XML-Datei ganz einfach auslesen.
Für dein Beispiel sieht das so aus:
Klasse Mannschaft
Java:
package org.javaforum.jaxb;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="Mannschaft")
public class Mannschaft {
@XmlElement(name="Spieler")
private List<Spieler> spieler;
public List<Spieler> getSpieler() {
return spieler;
}
}
Klasse Spieler
Java:
package org.javaforum.jaxb;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlType(name="Spieler")
public class Spieler {
@XmlElement(name="Vorname")
private String vorname;
@XmlElement(name="Nachname")
private String nachname;
@XmlElement(name="Position")
private String prosition;
public String getNachname() {
return nachname;
}
public String getProsition() {
return prosition;
}
public String getVorname() {
return vorname;
}
}
Und so sieht der Aufruf dann aus:
Java:
package org.javaforum.jaxb;
import java.net.URL;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
public class Test {
public static void main(String[] args) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(Mannschaft.class, Spieler.class);
Unmarshaller unmarschaller = context.createUnmarshaller();
File file = //Deine Datei
//alternativ kannst du auch eine URL angeben, dann musst du es nicht erst downloaden.
Mannschaft mannschaft = (Mannschaft) unmarschaller.unmarshal(file);
List<Spieler> spieler = mannschaft.getSpieler();
for (Spieler s : spieler) {
System.out.println(s.getVorname());
System.out.println(s.getNachname());
System.out.println(s.getProsition());
System.out.println("=======================");
}
}
}
Hey, danke!
Dein Beispiel hat mir schon mal ein wenig weitergeholfen.
Nun wollte ich dein Beispiel an mein Programm anpassen. Dabei tritt nun noch ein weiteres Problem auf, dass im Zusammenhang mit der Klasse Mannschaft, bzw. dem
[XML]
@XmlRootElement(name="Mannschaft")
[/XML]
zusammenhängt.
Die XML Datei dich ich downloade sieht so aus:
[XML]
<?xml version="1.0" encoding="utf-8"?>
<HattrickData>
<FileName>players.xml</FileName>
<Version>2.2</Version>
<UserID>xxxxxxx</UserID>
<FetchedDate>2012-03-10 02:55:54</FetchedDate>
<UserIsSupporter>0</UserIsSupporter>
<IsYouth>False</IsYouth>
<ActionType>view</ActionType>
<IsPlayingMatch>False</IsPlayingMatch>
<Mannschaft>
Ich habe aus diesem Tag
[XML]
@XmlRootElement(name="Mannschaft")
[/XML]
den gemacht. Da sich ja das RootElement geändert hat.
[XML]
@XmlRootElement(name="HattrickData")
[/XML]
.
Nun schmeisst mir das Programm ne Nullpointer...
Ich denke es hat mit den ganzen zusätzlichen Attributen in der XML Datei zu tun, bevor es mit den für mich wichtigen Attributen ab dem Tag
[XML]
<Mannschaft>
<Spieler>
.
.
</Spieler>
.
.
</Mannschaft>
[/XML]
losgeht...
Eine Idee was ich noch einzustellen habe?
@XmlRegistry
public class ObjectFactory {
private final static QName _HattrickData_QNAME = new QName("", "HattrickData");
public ObjectFactory() {
}
public HattrickDataType createHattrickDataType() {
return new HattrickDataType();
}
public SpielerType createSpielerType() {
return new SpielerType();
}
public MannschaftType createMannschaftType() {
return new MannschaftType();
}
@XmlElementDecl(namespace = "", name = "HattrickData")
public JAXBElement<HattrickDataType> createHattrickData(HattrickDataType value) {
return new JAXBElement<HattrickDataType>(_HattrickData_QNAME, HattrickDataType.class, null, value);
}
}
Das was BoBoHelp gepostet hat kommt raus, wenn man sich das aus einem XSD/DDT generieren lässt. Das geht natürlich auch. Es geht aber auch kürzer:
Java:
package org.javaforum.jaxb;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="HattrickData")
public class HattrickData {
@XmlElementWrapper(name="Mannschaft")
@XmlElement(name="Spieler")
private List<Spieler> spieler;
public List<Spieler> getSpieler() {
return spieler;
}
}
Wenn du an die Liste der Spieler noch
Code:
@XmlElementWrapper(name="Mannschaft")
schreibst, kannst du dir die Zwischenklasse "Mannschaft" sparen. Ich habe die anderen Elemente von HattrickData mal weggelassen. Falls du sie brauchst musst du sie einfach als Felder hinzufügen und mit
@...ButAlive
Also ich habe deine Anpassung einmal am Dummy Programm (also dein gepostetest) getestet. Läuft einwandfrei...
Dann habe ich versucht es auch an meinem Programm anzupassen und es bleibt bei der Null Pointer Exception.
Geworfen wird die Exception an der Stelle wo die Zuweisung per unmarshalling an das Objekt erfolgen soll:
diese Exception bekommen würde.
Habe schon herausgefunden, dass es angeblich an JAXB und dem UTF-8 Format liegen soll. Daher habe ich explizit die Datei noch mal im "ISO-8859-1" Encoding eingelesen. Diese untere Exception konnte ich damit beheben.
(Es erscheint trotzdem alles sehr seltsam, da ja das Dummyprogramm mit einer XML Datei im UTF-8 auch geht)
Code:
javax.xml.bind.UnmarshalException
- with linked exception:
[com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ungültiges Byte 2 von 3-Byte-UTF-8-Sequenz.]
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(Unknown Source)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(Unknown Source)
at HTSmart.getPlayers(HTSmart.java:84)
at HTSmart.<init>(HTSmart.java:36)
at FirstStart.validateAccess(FirstStart.java:169)
at FirstStart.<init>(FirstStart.java:52)
at FirstStart.main(FirstStart.java:185)
Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ungültiges Byte 2 von 3-Byte-UTF-8-Sequenz.
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.scanContent(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.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
... 11 more
Interessant ist, dass die Datei die ich downloade ebenso wie meine TestXML Datei im XML Kopf das hier
[XML]
<?xml version="1.0" encoding="utf-8"?>
[/XML]
stehen hat. Nur dass das Dummyprogramm mit der selber erzeugten XML Datei im UTF-8 Format geht und die gedownloadete die auch im XML UTF-8 Format vorliegt eben nicht, da die sonst obige Exception schmeisst.
Ich bin echt ratlos, was dieses Problem angeht.
Vielleicht sei an der Stelle noch erwähnt, dass ich an das XML Dokument aus dem Netz mit Hilfe einer FreeLicense-API gelange.
Die API liefert mir nur den Inhalt der ganzen XML-Datei, so dass ich mit folgender Methode mir mein eigenes XML File daraus speichern muss.:
Java:
public void writePlayersToXML() {
try {
File f = new File("XML/players_result.xml");
BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(f)));
out.write(response_Players.getBody()); // das ist die Methode aus der API die mir den gesamten Inhalt als String aus dem XML Dokument liefert
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Ich hab gerade noch nachgelesen, dass die API diesen String als UTF-8 endcodeten String zurück liefert.
Ist hier vielleicht der Fehler? Muss ich noch irgend etwas beachten beim erstellen der eigenen XML-Datei bzw. verändere ich vielleicht das Coding damit und mache es deshalb vielleicht nicht mehr lesbar für JAXB?
Hat keiner mehr ne Ahnung?
Hehe... Ich hab mir schon gedacht, dass das hier so langsam zu einem sehr speziellen Problem wird.
Dennoch bin ich weiterhin für jede Hilfe dankbar.
Ok also ich bin mit meinem Latein am Ende...
Ich danke für die bereits geposteten Hilfestellungen, aber leider konnte ich zu keinem positiven Ergebnis kommen.
Ich stelle hier nun mal meinen Code ein.
Es wäre nett wenn sich jemand das Problem anschauen könnte.
Klasse All_Players:
Java:
@XmlRootElement(name="HattrickData")
public class All_Players {
@XmlElementWrapper(name = "Team")
@XmlElement(name = "Player")
private List<Player> players;
public List<Player> getPlayers() {
return players;
}
}
public class Test extends DefaultHandler {
public static void main(String[] args){
new Test();
}
public Test() {
getPlayers();
}
public void getPlayers() {
try {
JAXBContext context = JAXBContext.newInstance(All_Players.class,
Player.class);
Unmarshaller unmarschaller = context.createUnmarshaller();
File file = new File("players_result.xml");
// Deine Datei alternativ kannst du auch eine URL angeben, dann
// musst du es nicht erst downloaden.
All_Players all_players = (All_Players) unmarschaller
.unmarshal(new InputStreamReader(new FileInputStream(file)));
List<Player> players = all_players.getPlayers();
for (int i = 0; i < players.size(); i++) {
System.out.println(players.get(i).getPlayer_FirstName());
System.out.println(players.get(i).getPlayer_LastName());
System.out.println(players.get(i).getPlayer_TSI());
// und die ganzen weiteren Elemente die in der Player.Class drin sind
System.out.println("=======================");
}
} catch (JAXBException e) {
e.printStackTrace();
} catch (Exception f) {
f.printStackTrace();
}
}
}
Es wäre mir eine große Hilfe wenn sich jemand die Mühe machen könnte und die geposteten CodeTeile ausprobieren könnte.
Den Inhalt der XML-Datei einfach in eine Textdatei kopieren und als players_result.xml speichern.
Weiss denn niemand mehr Rat? Oder könnte das ausprobieren?
Vielleicht seht ihr ja an dem obigen Codes von mir schon das Problem, aber ich versuche jetzt schon seit Tagen einfach dieses XML-Dokument auszulesen bzw. den Inhalt des XML-Elements "Player", um an die Daten eines jeden Spielers zu kommen...
OK ich möchte diesen Post nutzen um das Problem ein wenig anschaulicher darzustellen.
Daher nochmal kurz meine Aktuelle Situation:
Das zugrunde liegende XML-Dokument sieht folgendermaßen aus.
Es sollen nur die Daten die im Tag XML-Element <Player> stecken ausgelesen werden.
Ich verwende die XML-Annotation "@XmlElementWrapper(name = "PlayerList")" in der Klasse "PlayerList", befürchte aber, dass da das Problem liegt. Was ist denn mit dem XML-Element "Team"?
Muss ich da nicht auch irgendwie was angeben?
Hierzu erzeuge ich mir eine Klasse PlayerList, die sich eine Liste merkt um die Player aufzunehmen. Ich bitte hierbei auch um Überprüfung der XML-Annotationen, also ob ich da vielleicht was übersehen habe etc. .
Java:
@XmlRootElement(name = "HattrickData")
public class PlayerList {
@XmlElementWrapper(name = "PlayerList")
@XmlElement(name = "Player")
private List<Player> spieler;
public List<Player> getPlayer() {
return spieler;
}
}
Die Klasse Player:
Java:
@XmlType(name="Player")
public class Player {
@XmlElement(name="Vorname")
private String vorname;
@XmlElement(name="Nachname")
private String nachname;
@XmlElement(name="Position")
private String position;
public String getNachname() {
return nachname;
}
public String getPosition() {
return position;
}
public String getVorname() {
return vorname;
}
}
Und meine Test-Hauptklasse:
Java:
public class Test {
public static void main(String[] args) throws Exception {
JAXBContext context = JAXBContext.newInstance(PlayerList.class, Player.class);
Unmarshaller unmarschaller = context.createUnmarshaller();
File file = new File("test.xml");
PlayerList players = (PlayerList) unmarschaller
.unmarshal(new InputStreamReader(new FileInputStream(file)));
List<Player> spieler = players.getPlayer();
for (int i = 0; i < spieler.size(); i++) {
System.out.println(spieler.get(i).getVorname());
System.out.println(spieler.get(i).getNachname());
System.out.println(spieler.get(i).getPosition());
System.out.println("=======================");
}
}
}
Kurze Anmerkung noch:
Der gepostete Code oben funktioniert übrigends NUR wenn ich das XML Dokument so abändere:
Wie ihr seht habe ich den TAG "Team" rausgelassen. Dann gehts. Sobald der Tag wieder drin ist gehts nicht.
Ist es möglich mehrere @XMLElementWrapper zu verwenden? Also mir würde etwas helfen wie z.B.:
@XmlElementWrapper(name = "Team", "PlayerList")
Ich will ja wirklich nicht nerven mit dem Thema, aber Lektüre und verschiedene Internetforen und Google konnten mir hierbei nicht helfen. Ihr seit meine letzte Hoffnung.
Ich habe deinen Code nicht ausprobiert, aber ich würde mit dem eingebauten XMLParser arbeiten.
Hier mal mein Ansatz.
Die Player Klasse beinhaltet nur die für mich wichtigsten Variablen.
Mein Code basiert auf deiner XML Datei im Beitrag 9.
Team ID: 123456789
Team Name: TSV Hochhinaus
Player ID: 266420488
Player Name: Albertus Eijmael
Player Number: 100
Player Age: 26
Player ID: 366420488
Player Name: Hans Eijmael
Player Number: 100
Player Age: 28
-----------------------------------
Team ID: 987654321
Team Name: ASV Tiefhinab
Player ID: 166420488
Player Name: Alexander Eijmael
Player Number: 100
Player Age: 26
Player ID: 466420488
Player Name: Dieter Eijmael
Player Number: 100
Player Age: 28
-----------------------------------
package xml;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class TeamParser
{
private Document doc;
private ArrayList<Team> teamList;
public static void main(String[] args)
{
try
{
TeamParser parser = new TeamParser("player_data.xml");
parser.parseFile();
parser.printTeams();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public TeamParser(String file) throws ParserConfigurationException, SAXException, IOException
{
teamList = new ArrayList<Team>();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(true);
dbf.setIgnoringComments(true);
dbf.setIgnoringElementContentWhitespace(true);
dbf.setExpandEntityReferences(true);
DocumentBuilder db = dbf.newDocumentBuilder();
db.setErrorHandler(new DefaultHandler());
doc = db.parse(file);
}
public void parseFile()
{
NodeList teams = doc.getElementsByTagName("Team"); // Liste mit den <Team> Knoten
String teamName, firstName, lastName;
int teamID, playerID, playerNumber, age;
for (int i = 0; i < teams.getLength(); i++)
{
Element team = (Element) teams.item(i); // Knoten/Element <Team>
teamID = Integer.parseInt(team.getElementsByTagName("TeamID").item(0).getTextContent());
teamName = team.getElementsByTagName("TeamName").item(0).getTextContent();
teamList.add(new Team(teamID, teamName));
NodeList playerList = team.getElementsByTagName("Player");
for (int j = 0; j < playerList.getLength(); j++)
{
Element player = (Element) playerList.item(j);
playerID = Integer.parseInt(player.getElementsByTagName("PlayerID").item(0).getTextContent());
firstName = player.getElementsByTagName("FirstName").item(0).getTextContent();
lastName = player.getElementsByTagName("LastName").item(0).getTextContent();
playerNumber = Integer.parseInt(player.getElementsByTagName("PlayerNumber").item(0).getTextContent());
age = Integer.parseInt(player.getElementsByTagName("Age").item(0).getTextContent());
teamList.get(i).addPlayer(new Player(playerID, firstName, lastName, playerNumber, age));
}
}
}
public void printTeams()
{
for (int i = 0; i < teamList.size(); i++)
{
Team team = teamList.get(i);
System.out.println("Team ID: " + teamList.get(i).getID() + "\nTeam Name: " + teamList.get(i).getName());
for (int j = 0; j < teamList.get(i).getPlayerCount(); j++)
{
Player player = team.getPlayer(j);
System.out.println("Player ID: " + player.getID() + "\nPlayer Name: " + player.getFirstName() + " " + player.getLastName()
+ "\nPlayer Number: " + player.getNumber() + "\nPlayer Age: " + player.getAge());
}
System.out.println("-----------------------------------");
}
}
}
Player.java:
Java:
package xml;
public class Player
{
private int id;
private String firstName;
private String nickName;
private String lastName;
private int number;
private int age;
private int ageDays;
private int tsi;
public Player(int id, String firstName, String lastName, int number, int age)
{
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
this.number = number;
this.age = age;
}
public Player(int id, String firstName, String lastName, int number, int age, int ageDays, int tsi)
{
this(id, firstName, lastName, number, age);
this.ageDays = ageDays;
this.tsi = tsi;
}
public int getID()
{
return id;
}
public String getFirstName()
{
return firstName;
}
public String getNickName()
{
return nickName;
}
public String getLastName()
{
return lastName;
}
public int getNumber()
{
return number;
}
public int getAge()
{
return age;
}
public int getAgeDays()
{
return ageDays;
}
public int getTSI()
{
return tsi;
}
}
Team.java:
Java:
package xml;
import java.util.ArrayList;
public class Team
{
private int id;
private String name;
private ArrayList<Player> playerList;
public Team(int id, String name)
{
playerList = new ArrayList<Player>();
this.id = id;
this.name = name;
}
public void addPlayer(Player player)
{
playerList.add(player);
}
public Player getPlayer(int index)
{
return playerList.get(index);
}
public int getPlayerCount()
{
return playerList.size();
}
public int getID()
{
return id;
}
public String getName()
{
return name;
}
}
Gibt bestimmt Optimierungsmöglichkeiten und ich freue mich über jeden Vorschlag
ich habe schon ein mal dir alles gepostet. aber nein "man kann es kürzer machen"!. hier erneut alle klassen. dazu brauchst du nur "unmarshall" an HattrickData machen und hast alle daten drin, die kannst du beliebig auslesen:
Der ganze Overhead den XJC dabei erzeugt ist bei deinem Problem irrelevant.
Wenn ich dich richtig verstanden habe, speicherst du die Daten die du bekommst per Hand selbst ab. Deine Plattform ist Windows. Wenn du beim FileReader/Writer nichts weiter angibtst ist das Encoding das Default-Encoding der Plattform, in deinem Fall ISO-8859-1, also das von Windows. Der Server schickt jetzt aber UTF-8. Diese UTF-8-Daten ließt und speicherst du als ISO-8859-1 und versuchst sie wieder als ISO-8859-1 zu lesen.
Entweder du bleibst die ganze Zeit bei UTF-8, sprich du gibst es immer mit wenn du irgendwie die Daten ließt und schreibst, oder du ließt die Daten wenn sie von der URL kommen als UTF-8 und speicherst sie als ISO-8859-1.
Das was in der XML-Datei steht ist in deinem Fall irrelevant.
Also:
Um an die Daten zu kommen nutze ich eine JAVA oAuth-API namens Scribe.
Diese API liefert mir die nötigen Klassen um auf der Website Hattrick.org XML-Daten abzurufen.
Diese API selbst liefert mir einen String der im UTF-8 Standard gespeichert wird.
Ich selbst erzeuge mit
Java:
.
.
.
xmlFile = new File("XML/players_result.xml");
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(xmlFile)));
out.write(response_Players.getBody()); // getBody() liefert den langen String des XML Dokumentes im UTF-8 Standard
out.close();
.
.
.
Dieses XML File soll im Anschluss nur ausgelesen werden um, wie hier bereits mehrfach aufgezeigt, die Spieler einer Fussballmannschaft in Objekten zu speichern. Diese Objekte sollen im Weiteren verwendet werden um damit eine JTable oder was auch immer zu füllen und die Daten in schöner lesbarer Form für einen Benutzer auf einer GUI zur Verfügung zu stellen.
Ich konnte mit deiner Lösung oben leider kein positives Ergebnis erzielen. Auch als du sagtest:
Das was BoBoHelp gepostet hat kommt raus, wenn man sich das aus einem XSD/DDT generieren lässt. Das geht natürlich auch. Es geht aber auch kürzer:
.
.
.
Wenn du an die Liste der Spieler noch @XmlElementWrapper(name="Mannschaft") schreibst, kannst du dir die Zwischenklasse "Mannschaft" sparen. Ich habe die anderen Elemente von HattrickData mal weggelassen. Falls du sie brauchst musst du sie einfach als Felder hinzufügen und mit @XMLElement entsprechend annotieren.
Das funktioniert nur mit einer XML Datei dieser Form:
[XML]
<?xml version="1.0" encoding="utf-8"?>
<HattrickData>
<FileName>players.xml</FileName>
<Version>2.2</Version>
<UserID>xxxxxxx</UserID>
<FetchedDate>2012-03-10 02:55:54</FetchedDate>
<UserIsSupporter>0</UserIsSupporter>
<IsYouth>False</IsYouth>
<ActionType>view</ActionType>
<IsPlayingMatch>False</IsPlayingMatch>
<Team>
<Player>
<Vorname>Max</Vorname>
<Nachname>Mustermann</Nachname>
<Position>Mittelfeld</Position>
</Player>
</Team>
</HattrickData>
[/XML]
Aber es funktioniert NICHT mit der folgenden XML-Form. Hier ist es wichtig, dass es geht, da ich NUR in der Form die XML Dateien erhalte, wenn ich sie downloade.
[XML]
<?xml version="1.0" encoding="utf-8"?>
<HattrickData>
<FileName>players.xml</FileName>
<Version>2.2</Version>
<UserID>12314689</UserID>
<FetchedDate>2012-03-11 22:16:23</FetchedDate>
<UserIsSupporter>0</UserIsSupporter>
<IsYouth>False</IsYouth>
<ActionType>view</ActionType>
<IsPlayingMatch>False</IsPlayingMatch>
<Team>
<TeamID>123456789</TeamID>
<TeamName>TSV Hochhinaus</TeamName>
<PlayerList>
<Player>
<PlayerID>266420488</PlayerID>
<FirstName>Albertus</FirstName>
<NickName></NickName>
<LastName>Eijmael</LastName>
<PlayerNumber>100</PlayerNumber>
<Age>26</Age>
<AgeDays>61</AgeDays>
<TSI>30430</TSI>
<PlayerForm>6</PlayerForm>
<Statement></Statement>
<Experience>5</Experience>
<Loyalty>20</Loyalty>
<MotherClubBonus>False</MotherClubBonus>
<Leadership>6</Leadership>
<Salary>118920</Salary>
<IsAbroad>1</IsAbroad>
<Agreeability>1</Agreeability>
<Aggressiveness>4</Aggressiveness>
<Honesty>2</Honesty>
<LeagueGoals>1</LeagueGoals>
<CupGoals>1</CupGoals>
<FriendliesGoals>0</FriendliesGoals>
<CareerGoals>18</CareerGoals>
<CareerHattricks>0</CareerHattricks>
<Specialty>0</Specialty>
<TransferListed>0</TransferListed>
<NationalTeamID>0</NationalTeamID>
<CountryID>12</CountryID>
<Caps>0</Caps>
<CapsU20>0</CapsU20>
<Cards>1</Cards>
<InjuryLevel>-1</InjuryLevel>
<StaminaSkill>7</StaminaSkill>
<KeeperSkill>1</KeeperSkill>
<PlaymakerSkill>6</PlaymakerSkill>
<ScorerSkill>3</ScorerSkill>
<PassingSkill>6</PassingSkill>
<WingerSkill>5</WingerSkill>
<DefenderSkill>13</DefenderSkill>
<SetPiecesSkill>5</SetPiecesSkill>
<PlayerCategoryId>0</PlayerCategoryId>
</Player>
</PlayerList>
</Team>
</HattrickData>
[/XML]
@BoBoHelp
Ich danke für deine Hilfe. Ich habe es nun nachgebaut und die Implementierung funktioniert auch sehr gut.
Dennoch wäre es interessant zu wissen, ob eine funktionierende Lösung wie ...ButAlive es gepostet hat auch möglich ist. Also auch hier wäre ich dankbar, wenn man eine Lösung hierfür erhalten könnte.
XML in Verbindung mit Java ist eine echt neue Sache mit vielen Stolpersteinen für mich. Daher wäre ich dankbar wenn ihr mir vielleicht ein wenig Lektüre, Onlinematerial usw. nennen könntet die ich zum Lernen verwenden kann. Ich muss da mal einiges aufarbeiten. Das habe ich deutlich gemerkt.