Member 11403304 Ответов: 4

Как исправить ссылку на объект, не установленную на экземпляр ошибки объекта?


Я пытаюсь получить вывод из xml-документа,и все работает. Однако когда я комментирую (удаляю элемент слова SecurityGroup), для этого элемента я получаю ссылку на объект, не установленную на экземпляр объекта.
Мой xml-документ
<pre lang="xml"><pre><Integration>
   <Case>
	<CaseCategory>FAM</CaseCategory>
	<CaseType Word="DMA">Domestic Abuse</CaseType>
	<BaseCaseType>Civil Domestic Violence</BaseCaseType>
	<CaseTitle>X v/s Y</CaseTitle>
	<!--<SecurityGroup Word="CONFPOR">Conf - Protective Order</SecurityGroup>-->
	<Court>
	   <NodeID>131</NodeID>
	</Court>
   </Case>
</Integration>


Мой vb.net код
Dim strCaseTypeCodeWord As String
Dim strBaseCaseType As String
Dim strCaseSecurityGroupCodeWord As String
Dim intNodeID As Integer

strCaseTypeCodeWord = aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/CaseType/@Word").InnerText
strBaseCaseType = aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/BaseCaseType").InnerText
strCaseSecurityGroupCodeWord = aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/Case/SecurityGroup/@Word").InnerText
intNodeID = CInt(aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/Assignment/Court/NodeID").InnerText)


Результат
strCaseTypeCodeWord = DMA
strBaseCaseType = гражданское насилие в семье
strCaseSecurityGroupCodeWord здесь я получаю ссылку на объект, не заданную на экземпляр объекта. потому что я прокомментировал/удалил этот элемент в xml-документе. Это необязательный элемент.
Что мне нужно сделать, чтобы vb.net код будет работать даже тогда, когда эта группа безопасности не существует в xml-документе?

Что я уже пробовал:

Dim strCaseTypeCodeWord As String
            Dim strBaseCaseType As String
            Dim strCaseSecurityGroupCodeWord As String
            Dim intNodeID As Integer
 strCaseTypeCodeWord = aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/CaseType/@Word").InnerText
                strBaseCaseType = aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/BaseCaseType").InnerText
                strCaseSecurityGroupCodeWord = aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/Case/SecurityGroup/@Word").InnerText
                intNodeID = CInt(aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/Assignment/Court/NodeID").InnerText)

[no name]

Хорошо, эта ошибка происходит по той же причине, что и все во Вселенной, и вы исправляете ее точно так же, как и все остальные. Простой поиск в google сказал бы вам об этом.

4 Ответов

Рейтинг:
28

Patrice T

Цитата:
Как исправить ссылку на объект, не установленную на экземпляр ошибки объекта?

Если вы ожидаете
aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/Case/SecurityGroup/@Word").InnerText

чтобы потерпеть неудачу из-за того, что узел является необязательным, вам нужно проверить, является ли переменная, содержащая результат, все еще строкой или нулем. если переменная имеет значение NULL, установите значение по умолчанию.

strCaseSecurityGroupCodeWord = aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/Case/SecurityGroup/@Word").InnerText
if strCaseSecurityGroupCodeWord = NULL then
    ...
end if


Рейтинг:
2

Dave Kreskowiak

На переменной ты вызов метода или, чтобы получить/установить значение свойства равно null.

Мы не можем сказать вам, какие именно, потому что у нас нет данных, которые использует ваш код.

Вы можете легко узнать, что вызывает это, просто используя отладчик. Когда код остановится, отладчик покажет вам, какая строка проходит через исключение. Наведите указатель мыши на каждую переменную и объект, чтобы проверить его содержимое. По крайней мере, один из них будет нулевым. Затем вы должны проследить свой код назад, пока не найдете, почему/как эта переменная/объект получила значение null.

Наведите курсор мыши на каждое имя переменной, например strCaseTypeCodeWord, и объект, как и каждая часть aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/CaseType/@Word").


Karthik_Mahalingam

5

Рейтинг:
2

Member 11403304

Вот как я решил эту проблему, также основываясь на решениях, которые я получил от Брайана Тана. Если узла там нет я установлю strCaseSecurityGroupCodeWord в пустую строку ""

If aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/SecurityGroup/@Word") Is Nothing Then
                    strCaseSecurityGroupCodeWord = ""


Рейтинг:
14

Bryian Tan

Другой вариант-проверить, является ли узел нулевым, прежде чем обращаться к его значению.

strCaseSecurityGroupCodeWord = aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/Case/SecurityGroup/@Word") != null? aobjXMLInputDoc.DocumentElement.SelectSingleNode("Case/Case/SecurityGroup/@Word").InnerText : string.empty