2010-09-27 2 views
0

У меня есть функция, которая получает строку, переданную ему. При тестировании функции я получаю исключение нулевой ссылки в строковом параметре, который передается ему, хотя строка не является нулевой, я не понимаю, почему я получаю эту ошибку. У меня есть снимок экрана нижеNullReference для значения, которое не является нулевым

alt text

Я использовал фиктивное значение, чтобы проверить как строковый параметр в функции SelectSingleNode и строковый параметр NEWVALUE передается в мою функцию, и они оба содержат значения, так что я не» t понять, почему он выбрасывает исключение с нулевой ссылкой. Для ясности цель этой функции - записать значения обратно в узлы XML-файла.

UPDATE

Извините за не размещение кода

Private Sub setValue(ByVal nodeToMod As String, ByVal newValue As String) 
     ''Test writing to xml config file 
     Dim dummy As String = "Config/" & nodeToMod 
     Dim xmlDoc As New XmlDocument 
     Using fs As FileStream = New FileStream(HttpContext.Current.Server.MapPath("~/XML_Config/Config.xml"), FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite) 
      xmlDoc.Load(fs) 
      Dim foo As XmlNode = xmlDoc.SelectSingleNode(dummy) 
      Console.WriteLine(foo.InnerXml) 
      fs.Seek(0, SeekOrigin.Begin) 
      fs.SetLength(0) 
      xmlDoc.Save(fs) 
     End Using 
    End Sub 

А вот XML файл я работаю с

<?xml version="1.0" encoding="utf-8"?> 
<Config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Username>[email protected]</Username> 
    <Password>Password1</Password> 
    <ProductType>MyProduct</ProductType> 
    <DirectoryEntryPath>LDAP://myDomain</DirectoryEntryPath> 
    <SMTPDefaultOnly>True</SMTPDefaultOnly> 
    <Logo>myLogo.gif</Logo> 
</Config> 

Да, функция SlectSingleNode не возвращает значение. Я только начал работать с XPath, это, похоже, сработало, когда я использовал на прошлой неделе. Я не уверен, почему она перестала работать сейчас.

UPDATE2:

Понял, глупую ошибку. У меня был nodeToMod передаются как «UserName» вместо «Username» в методе Set

 Set(ByVal value As String) 
      setValue("UserName", value.ToString) 
      _userName = value 
     End Set 
+0

Вы могли бы хотеть, чтобы показать нам больше кода. Если он дает пустое исключение, то «newValue» определенно является нулевым во время его присвоения внутреннему тексту. – loxxy

+0

@loxxy, 'newValue' не разыгрывается на этой строке. Это не может быть причиной NRE. –

+0

@kirk, вопрос был отредактирован с дополнительной информацией. Разновидность не была очевидна раньше. – loxxy

ответ

5

Нулевая ссылка, на которую жалуется, является результатом звонка SelectSingleNode. То есть, когда xpath, образованный путем конкатенации /Config/, и содержимое nodeToMod оценивается по документу, ни один узел не совпадает. Таким образом, вы получаете нуль, и попытка установить InnerText null дает исключение.

Нам действительно нужно увидеть nodeToMod и сам файл xml, чтобы помочь дальше. Кроме того, пожалуйста, отправьте код, а не скриншоты!

0

Убедитесь, что объект FileStream вы создаете не выходит из нуля. Может быть, он не может найти файл config.xml?

0

Скорее всего, результат SelectSingleNode - null.

Изменение, что линии на две линии, и это будет легче увидеть проблему в отладчике:

Dim node = xmlDoc.SelectSingleNode(dummy) 
node.InnerText = newValue 
Смежные вопросы