The method below is passed an XMLDocument (DefaultValues
), and loops through it to extract values used to populate a variety of popup menus.
These key/value pairs are then stored in a set of dictionaries (which are Properties inside this module).
However, when it gets to the first case in the Select Case block, “Gauge” it’s crashing with a NilObjectException. I can’t figure out what’s causing this though - I don’t think it’s the values I’m passing to the dictionary, because those appear to be correct (see the two variables xmlID
and xmlValue
, which should be 0
and 28mm
, respectively). The debugger is showing that those are correct. So, what am I missing here?
Var root As XmlNode
root = DefaultValues.DocumentElement
Var defaultElement As XmlNode
For c As Integer = 0 To root.ChildCount-1
defaultElement = root.Child(c)
//there may not be any data here, so check that first
if defaultElement.FirstChild <> nil and defaultElement.FirstChild.Value <> "" then
var xmlID as string = defaultElement.GetAttribute("id")
var xmlValue as string = defaultElement.FirstChild.Value
Select Case defaultElement.Name
case "Gauge"
DefaultFilmGauges.Value(xmlID) = xmlValue
case "ColorMode"
DefaultColorModes.Value(xmlID) = xmlValue
case "ColorDepth"
DefaultColorDepths.Value(xmlID) = xmlValue
case "HDRMode"
DefaultHDRMode.Value(xmlID) = xmlValue
case "OutputFileFormat"
DefaultOutputFileFormats.Value(xmlID) = xmlValue
end select
//if this is a comment, ignore it:
elseif defaultElement.Name = "#comment" then
continue
end if
Next
This results in a NilObjectException on
DefaultFilmGauges.Value(xmlID) = xmlValue
But the exception is ErrorNumber 0, and has no message or reason. I can clearly see, though, that the data I’m looking for in xmlID
and xmlValue
is correct: