in src/main/scala/pa/Parser.scala [85:126]
def parseMatchEvents(s: String): Option[MatchEvents] = {
val xml = XML.loadString(s)
def parseTeam(team: NodeSeq) = Team(
team \@ "teamID",
team.text
)
def parsePlayer(player: NodeSeq): Option[Player] = (player \@@ "playerID") map {
Player(_, player \@ "teamID", player.text)
}
def parseEvent(event: NodeSeq) = MatchEvent(
event \@ "eventID",
event \@ "teamID",
event \> "eventType",
event \> "matchTime",
event \> "eventTime",
event \> "addedTime",
((event \\ "player1") ++ (event \\ "player2")) flatMap { parsePlayer },
event \> "reason",
event \> "how",
event \> "whereFrom",
event \> "whereTo",
event \> "distance",
event \> "outcome"
)
def parseIsResult(isResult: NodeSeq) = isResult.text == "Yes"
//annoyingly there are some matches with no events
//marked up in a weird way
xml \ "teams" \>> "homeTeam" map { homeTeam =>
MatchEvents(
parseTeam(xml \\ "homeTeam"),
parseTeam(xml \\ "awayTeam"),
(xml \ "events" \\ "event") map { parseEvent },
parseIsResult(xml \ "isResult")
)
}
}