2010-09-27 86 views
0

我有一个函数可以获取传递给它的字符串。在测试函数时,我得到了传递给它的字符串参数的空引用异常,即使字符串不为空,我也不明白为什么我会得到这个错误。我有一个屏幕截图如下对非空值的NullReference

alt text

我用虚值,同时验证在的SelectSingleNode函数的字符串参数和NEWVALUE字符串参数传递给我的功能,它们都包含值,所以我不不明白为什么它抛出一个空引用异常。为了清楚起见,该函数的目的是将值写回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 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函数没有返回值工作的XML文件。我刚开始使用XPath,这在我上周使用时似乎很有用。我不知道为什么它现在停止工作。

UPDATE2:

明白了,愚蠢的错误。我曾在nodeToMod Set方法

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

您可能希望向我们展示了更多的代码。如果它给出了空的异常,那么在赋值为innertext时,“newValue”肯定是空的。 – loxxy 2010-09-27 17:10:57

+0

@loxxy,'newValue'没有在该行被取消引用。它不能成为NRE的原因。 – 2010-09-27 17:12:54

+0

@kirk,这个问题已经被更多的信息编辑。解除引用并不明显。 – loxxy 2010-09-28 11:10:55

回答

5

正被抱怨空引用是调用SelectSingleNode结果。也就是说,当针对文档评估通过连接/Config/nodeToMod的内容形成的xpath时,没有节点匹配。所以你得到空,并试图设置空的InnerText给出了例外。

我们真的需要看到nodeToMod和xml文件本身来帮助进一步。另外,请张贴代码而不是截图!

0

确保您正在创建的FileStream对象不出来空传递为“用户名”,而不是“用户名”。也许它找不到config.xml文件?

0

这可能是SelectSingleNode的结果为空。

把上面一行两行,它会更容易看到在调试器中的问题:

Dim node = xmlDoc.SelectSingleNode(dummy) 
node.InnerText = newValue