2017-03-15 3 views
-1

I Arraylist mit Objekten, die jeweils folgende Elemente enthalten:Wie Arraylist als XML speichern

  • Jersey Nummer
  • Vorname
  • Nachname
  • Bevorzugte Position
  • Tore
  • Assists

    ArrayList <blackTeam> blackTeam = new ArrayList <blackTeam>(); 
    
    ... 
    
    public class blackTeam { 
    
    int goals, assists; 
    String jerseyNum, firstName, lastName, prefPosition; 
    
    blackTeam (String _jerseyNum, String _firstName, String _lastName, String _prefPosition, int _goals, int _assists) { 
        jerseyNum = _jerseyNum; 
        firstName = _firstName; 
        lastName = _lastName; 
        prefPosition = _prefPosition; 
        goals = _goals; 
        assists = _assists; 
    } 
    } 
    

Dies ist mein Code für die Daten als XML speichern:

 try { 
       String filepath = "blackTeam.xml"; 
       DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
       Document doc = docBuilder.parse(filepath); 

       Element root = doc.createElement("BlackTeam"); 
       doc.appendChild(root); 

       for (int i = 0; i < blackTeam.size(); i++) { 
        Element player = doc.createElement("Player"); 
        root.appendChild(player); 

        Element jerseyNum = doc.createElement("JerseyNum"); 
        jerseyNum.appendChild(doc.createTextNode(blackTeam.get(i).jerseyNum)); 
        player.appendChild(jerseyNum); 

        Element firstName = doc.createElement("FirstName"); 
        firstName.appendChild(doc.createTextNode(blackTeam.get(i).firstName)); 
        player.appendChild(firstName); 

        Element lastName = doc.createElement("LastName"); 
        lastName.appendChild(doc.createTextNode(blackTeam.get(i).lastName)); 
        player.appendChild(lastName); 

        Element prefPosition = doc.createElement("PrefferedPosition"); 
        prefPosition.appendChild(doc.createTextNode(blackTeam.get(i).lastName)); 
        player.appendChild(prefPosition); 

        Element goals = doc.createElement("Goals"); 
        goals.appendChild(doc.createTextNode(String.valueOf(blackTeam.get(i).goals))); 
        player.appendChild(goals); 

        Element assists = doc.createElement("Assists"); 
        assists.appendChild(doc.createTextNode(String.valueOf(blackTeam.get(i).assists))); 
        player.appendChild(assists); 
       } 

       //write the content into xml file 
       TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
       Transformer transformer = transformerFactory.newTransformer(); 
       DOMSource source = new DOMSource(doc); 
       StreamResult result = new StreamResult(new File(filepath)); 
       transformer.transform(source, result); 

       System.out.println("Done"); 

      }catch(ParserConfigurationException pce){ 
        pce.printStackTrace(); 
      }catch(TransformerException tfe){ 
        tfe.printStackTrace(); 
      }catch(IOException ioe){ 
        ioe.printStackTrace(); 
      }catch(SAXException sae){ 
        sae.printStackTrace(); 
      } 

ich das ausgegebene XML will wie in diesem Beispiel aussehen:

<blackTeam> 
    <player> 
     <jerseyNumber>56</jerseyNumber> 
     <firstName>John</firstName> 
     <lastName>Smith</lastName> 
     <preferredPosition>Center</preferredPosition> 
     <goals>45</goals> 
     <assists>13</assists> 
    </player> 
    <player> 
     <jerseyNumber>43</jerseyNumber> 
     <firstName>Bill</firstName> 
     <lastName>Jones</lastName> 
     <preferredPosition>Defense</preferredPosition> 
     <goals>12</goals> 
     <assists>27</assists> 
    </player> 
<blackTeam> 

Wenn ich meinen Code ausführen ich :

[Schwerwiegender Fehler] blackTeam.xml: 1: 1: Vorzeitiges Ende der Datei. org.xml.sax.SAXParseException; systemId: file: /// D: /Computer%20Science%2012/League_Database/blackTeam.xml; Zeilennummer: 1; Spaltennummer: 1; Vorzeitiges Ende der Datei.

ich ziemlich sicher, dass diese Linie einen Fehler verursacht:

Document doc = docBuilder.parse(filepath); 

Kann mir jemand erklären, warum mein Code funktioniert nicht und eine Lösung bieten?

Antwort

1

Sie können die Methode docBuilder.parse() in Ihrem Fall nicht verwenden. Diese Methode wird verwendet, wenn Sie bereits eine XML-Datei haben und eine Java-Repräsentation (Document) dieser XML-Datei abrufen möchten.

Da Sie eine neue Datei erstellen möchten, sollten Sie mit diesem Code gehen:

Document doc = docBuilder.newDocument(); 
+0

Das scheint es behoben zu haben, danke! @SilverNak – ckorvee

+0

Gern geschehen! – SilverNak