Reputation: 97
I'm parsing an XML via Javascript and I try to print out specific elements in HTML. I use the method getElementsByTagName
and it seems to be working for some elements, but for others it returns undefined, even though the element name is written correctly. Here is a code snippet from the XML file:
<WeatherData>
<Cloudiness>
<PropObj>
<Prop>
<Key>Cloudiness</Key>
<Type>Text</Type>
</Prop>
<PropItem>
<Value>Very cloudy</Value>
</PropItem>
</PropObj>
</Cloudiness>
<Humidity>
<PropObj>
<Prop>
<Key>Humidity</Key>
<Type>Text</Type>
</Prop>
<PropItem>
<Value>Very humid</Value>
<PropItem/>
</PropObj>
</Humidity>
<MinTemp>
<PropObj>
<Prop>
<Key>MinimumTemperature</Key>
<Type>Text</Type>
</Prop>
<PropItem>
<Value>3</Value>
<PropItem/>
</PropObj>
</MinTemp>
<MaxTemp>
<PropObj>
<Prop>
<Key>MaximumTemperature</Key>
<Type>Text</Type>
</Prop>
<PropItem>
<Value>30</Value>
</PropItem>
</PropObj>
</MaxTemp>
</WeatherData>
I created a table in HTML to extract the values from Cloudiness, Humidity, MinTemp and MaxTemp, which are in this case "Very cloudy", "Very humid", 3 and 30. The table in HTML looks like this:
<table class="table" title="Weatherinformation">
<caption>Weather Information</caption>
<tr>
<th>Cloudiness:</th>
<td id="cloudiness"></td>
</tr>
<tr>
<th>Humidity:</th>
<td id="humidity"></td>
</tr>
<tr>
<th>Minimum temperature:</th>
<td id="mintemp"></td>
</tr>
<tr>
<th>Maxmimum temperature:</th>
<td id="maxtemp"></td>
</tr> </table>
And in JS, I update the innerHTML of the table cells by doing this:
document.getElementById("cloudiness").innerHTML = xmlDoc.getElementsByTagName("Cloudiness")[0].getElementsByTagName("Value")[0].textContent;
document.getElementById("humidity").innerHTML = xmlDoc.getElementsByTagName("Humidity")[0].getElementsByTagName("Value")[0].textContent;
document.getElementById("mintemp").innerHTML = xmlDoc.getElementsByTagName("MinTemp")[0].getElementsByTagName("Value")[0].textContent;
document.getElementById("maxtemp").innerHTML = xmlDoc.getElementsByTagName("MaxTemp")[0].getElementsByTagName("Value")[0].textContent;
And for some reason, it works fine for Cloudiness and Humidity (I get the correct values "Very cloudy" and "Very humid"). But for MinTemp and MaxTemp, I always get an undefined error app.js:57 Uncaught TypeError: Cannot read property 'textContent' of undefined
. Does anyone know why I get this error? Would appreciate all kinds of help!
Upvotes: 1
Views: 501
Reputation: 560
Looks like in the xml document, the tag is not closed properly.
<Humidity>
<PropObj>
<Prop>
<Key>Humidity</Key>
<Type>Text</Type>
</Prop>
<PropItem>
<Value>Very humid</Value>
<PropItem/>
The last tag above is not a closure tag - may be a typo ?
PS: There are others below with the same issue, please fix them as well.
Upvotes: 1