I'm trying to populate two select list using the following XML file:
<HealthServices>
<Divisions>
<Division>Home Office</Division>
<Facility>Administration</Facility>
<Facility>Finance</Facility>
<Facility>Human Resources</Facility>
<Facility>Operations</Facility>
</Divisions>
<Divisions>
<Division>Hospital</Division>
<Facility>Facility1</Facility>
<Facility>Facility2</Facility>
</Divisions>
<Divisions>
<Division>Sr. Housing</Division>
<Facility>Facility3</Facility>
<Facility>Facility4</Facility>
</Divisions>
</HealthServices>
Here is the script that I'm using:
<script language="JavaScript" type="text/javascript">
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
var allDivisions;
var allDivisionNodes;
var allFacilityNodes;
function init(){
xmlDoc.async = false;
xmlDoc.load("./xml/esf_data4.xml");
xmlDoc.setProperty("SelectionLanguage", "XPath");
allDivisions = xmlDoc.selectNodes("//Divisions");
allDivisionNodes = xmlDoc.selectNodes("//Division");
allFacilityNodes = xmlDoc.selectNodes(".//Facility");
populateDivisionList();
populateFacilityList();
}
function populateDivisionList(){
clearSelect('OBDataset_Division_1');
var lstDivision = document.getElementById('OBDataset_Division_1');
for (var i=0; i<allDivisions.length; i++) {
var thisDivisionNameTxt = allDivisions[i].selectNodes("./Division")[0].text;
var newOption = document.createElement("option");
newOption.innerHTML=thisDivisionNameTxt;
newOption.value = allDivisions[i].selectNodes("./Division")[0].text;
lstDivision.appendChild(newOption);
}
}
function populateFacilityList(){
clearSelect('OBDataset_Facility_1');
var lstFacility = document.getElementById('OBDataset_Facility_1');
for (var i=0; i<allFacilityNodes.length; i++) {
var thisFacilityNameTxt = allDivisions[0].selectNodes("./Facility")[i].text;
var newOption = document.createElement("option");
newOption.innerHTML=thisFacilityNameTxt;
newOption.value = allDivisions[0].selectNodes("./Facility")[i].text;
lstFacility.appendChild(newOption);
}
}
function clearSelect(list){
var lstSelect = document.getElementById(list);
lstSelect.length = 0;
}
</script>
I'm getting an error because my for loop is looping too many times because the length of allFacilityNodes is counting all Facility nodes in the list and I only want the ones for a selected Division. How can I fix this?