Based on a value I input on the page, I want to retrieve the relevant XML data.
For example, if I input/select option
"Michigan" from the datalist
input field on my page, I want to find the node
position of Michigan in the XML
document. By knowing the node
position, I can retrieve other information from the XML
document corresponding to Michigan such as GDP
and POPULATION
.
I know I should change [1]
to a variable such as [i]
, but how should I code the function?
var n = document.getElementById("myInputId");
n.addEventListener("keyup", function(event) {
event.preventDefault();
if (event.keyCode === 13) {
document.getElementById("myButton").click();
}
});
function loadXMLDoc() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
myFunction(xmlhttp);
}
};
xmlhttp.open("GET", "state_data.xml", true);
xmlhttp.send();
}
function myFunction(xml) {
var x, i, xmlDoc;
xmlDoc = xml.responseXML;
x = xmlDoc.getElementsByTagName("UNIT")
var s = xmlDoc.getElementsByTagName("STATE")[1].childNodes[0].nodeValue;
document.getElementById("state").innerHTML = s;
var gElem = xmlDoc.getElementsByTagName("GDP");
var g = (gElem.length > 0) ? gElem[1].childNodes[0].nodeValue : "";
document.getElementById("gdp").innerHTML = g;
var pElem = xmlDoc.getElementsByTagName("POPULATION");
var p = (pElem.length > 0) ? pElem[1].childNodes[0].nodeValue : "";
document.getElementById("population").innerHTML = p;
var a = n.value
document.getElementById("inputValue").innerHTML = a;
xmlDoc.UNITs.forEach(function(e, z) {
var q = document.getElementById("inputValue").innerHTML;
if (e.properties.id == q) {
document.getElementById("nodePosition").innerHTML = z;
}
});
}
<body onload="loadXMLDoc()">
<input list="myInput" id="myInputId" value="">
<button id="myButton" onClick="loadXMLDoc()">submit</button>
<p>input value: <span id="inputValue"></span></p>
<p>XML tree node position of input value: <span id="nodePosition"></span></p>
<p>State: <span id="state"></span></p>
<p>GDP: <span id="gdp"></span></p>
<p>Population: <span id="population"></span></p>
<datalist id="myInput">
<option id="AL">Alabama</option>
<option id="CA">California</option>
<option id="MI">Michigan</option>
<option id="TX">Texas</option>
<option id="WI">Wisconsin</option>
</datalist>
Here's my XML:
<?xml version="1.0" encoding="UTF-8"?>
<STATE_DATA>
<UNIT>
<STATE>Wisconsin</STATE>
<GDP>232,300,000,000</GDP>
<POPULATION>5,800,000</POPULATION>
</UNIT>
<UNIT>
<STATE>Alabama</STATE>
<GDP>165,800,000,000</GDP>
<POPULATION>4,900,000</POPULATION>
</UNIT>
<UNIT>
<STATE>California</STATE>
<!-- Note: the GDP node for this unit is missing -->
<POPULATION>39,600,000</POPULATION>
</UNIT>
<UNIT>
<STATE>Texas</STATE>
<GDP>1,600,000,000,000</GDP>
<POPULATION>28,300,000</POPULATION>
</UNIT>
<UNIT>
<STATE>Michigan</STATE>
<GDP>382,000,000</GDP>
<POPULATION>10,000,000</POPULATION>
</UNIT>
</STATE_DATA>