function parseCandidateElement(e) {
const partyElement = e.parentElement;
const countyResultsElement = partyElement.parentElement;
const countiesElement = countyResultsElement.parentElement;
const raceElement = countiesElement.parentElement;
const typeRaceElement = raceElement.parentElement;
let no_votes;
try {
no_votes = +e.querySelector('NoVotes').textContent;
}
catch(err) {
no_votes = null;
}
return {
type: typeRaceElement.querySelector('Type').textContent,
race_title: raceElement.querySelector('RaceTitle').textContent,
county_name: countiesElement.querySelector('CountyName').textContent,
reporting_precincts: +countyResultsElement.querySelector('ReportingPrecincts').textContent,
total_precincts: +countyResultsElement.querySelector('TotalPrecincts').textContent,
party: partyElement.querySelector('PartyName').textContent,
candidate_id: e.querySelector('CandidateID').textContent,
candidate_name: e.querySelector('LastName').textContent,
yes_votes: +e.querySelector('YesVotes').textContent,
no_votes: no_votes
}
}