diff --git a/doc/examples/teams.xml b/doc/examples/teams.xml
index ea549357..73c0f898 100644
--- a/doc/examples/teams.xml
+++ b/doc/examples/teams.xml
@@ -3,12 +3,32 @@
Oracle Team USA
- USA
- 23.4
+ USA
+ 23.4
+
+
+ Artemis Racing
+ ART
+ 12.9
Emirates Team New Zealand
- NZL
- 25.2
+ NZL
+ 25.2
+
+
+ Land Rover BAR
+ BAR
+ 16.4
+
+
+ SoftBank Team Japan
+ JAP
+ 19.22
+
+
+ Groupama Team France
+ FRC
+ 28.8
\ No newline at end of file
diff --git a/src/main/java/seng302/models/parsers/TeamsParser.java b/src/main/java/seng302/models/parsers/TeamsParser.java
new file mode 100644
index 00000000..c4d34b1f
--- /dev/null
+++ b/src/main/java/seng302/models/parsers/TeamsParser.java
@@ -0,0 +1,63 @@
+package seng302.models.parsers;
+
+import org.w3c.dom.*;
+import seng302.models.Boat;
+
+import java.util.ArrayList;
+import java.util.NoSuchElementException;
+
+public class TeamsParser extends FileParser {
+
+ private Document doc;
+
+ public TeamsParser(String path) {
+ super(path);
+ this.doc = this.parseFile();
+ }
+
+ /**
+ * Create a boat instance by a given team node
+ * @param node a boat node containing name, alias and velocity
+ * @return an instance of Boat
+ */
+ private Boat parseBoat(Node node) {
+ try {
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ Element element = (Element) node;
+ String name = element.getElementsByTagName("name").item(0).getTextContent();
+ String alias = element.getElementsByTagName("alias").item(0).getTextContent();
+ double velocity = Double.valueOf(element.getElementsByTagName("velocity").item(0).getTextContent());
+ Boat boat = new Boat(name, velocity);
+ return boat;
+ } else {
+ throw new NoSuchElementException("Cannot generate a boat by given node");
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ /**
+ * Create an arraylist of boats instance.
+ * @return an arraylist of boats in teams file
+ */
+ public ArrayList getBoats() {
+ ArrayList boats = new ArrayList<>();
+ try {
+ NodeList nodes = this.doc.getElementsByTagName("team");
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Node node = nodes.item(i);
+
+ boats.add(parseBoat(node));
+ }
+ return boats;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+
+}
+
diff --git a/src/main/java/seng302/models/parsers/teamsParser.java b/src/main/java/seng302/models/parsers/teamsParser.java
deleted file mode 100644
index b54c1773..00000000
--- a/src/main/java/seng302/models/parsers/teamsParser.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package seng302.models.parsers;
-
-public class teamsParser extends FileParser {
-
- public teamsParser(String path) {
- super(path);
- }
-
-
-}
-
diff --git a/src/test/java/seng302/models/parsers/TeamsParserTest.java b/src/test/java/seng302/models/parsers/TeamsParserTest.java
new file mode 100644
index 00000000..c0fd2814
--- /dev/null
+++ b/src/test/java/seng302/models/parsers/TeamsParserTest.java
@@ -0,0 +1,35 @@
+package seng302.models.parsers;
+
+import org.junit.Before;
+import org.junit.Test;
+import seng302.models.Boat;
+
+import java.util.ArrayList;
+
+import static org.junit.Assert.*;
+
+/**
+ * Created by Haoming on 18/03/17.
+ */
+public class TeamsParserTest {
+
+ private TeamsParser tp;
+ @Before
+ public void readFile() {
+ tp = new TeamsParser("doc/examples/teams.xml");
+ }
+
+ @Test
+ public void getBoats() throws Exception {
+ ArrayList boats = tp.getBoats();
+
+ assertEquals(6, boats.size(), 1e-10);
+
+ assertEquals("Oracle Team USA", boats.get(0).getTeamName());
+ assertEquals(23.4, boats.get(0).getVelocity(), 1e-10);
+
+ assertEquals("Groupama Team France", boats.get(5).getTeamName());
+ assertEquals(28.8, boats.get(5).getVelocity(), 1e-10);
+ }
+
+}
\ No newline at end of file