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

我使用了一个虚拟值来验证SelectSingleNode函数中的字符串参数和传递给我的函数的newValue字符串参数,它们都包含值,所以我不明白它为什么抛出一个空引用异常。为了清楚起见,该函数的目的是将值写回XML文件的节点。
更新
很抱歉没有发布代码
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>john.doe@email.com</Username>
<Password>Password1</Password>
<ProductType>MyProduct</ProductType>
<DirectoryEntryPath>LDAP://myDomain</DirectoryEntryPath>
<SMTPDefaultOnly>True</SMTPDefaultOnly>
<Logo>myLogo.gif</Logo>
</Config>是的,SlectSingleNode函数没有返回值。我刚开始使用XPath,这似乎在我上周使用的时候就起作用了。我不确定为什么它现在停止工作了。
UPDATE2:
明白了,愚蠢的错误。在Set方法中,我将用户名作为"UserName“而不是”nodeToMod“传递
Set(ByVal value As String)
setValue("UserName", value.ToString)
_userName = value
End Set发布于 2010-09-28 01:11:47
被抱怨的空引用是调用SelectSingleNode的结果。也就是说,当针对文档评估由连接/Config/和nodeToMod内容形成的xpath时,没有匹配的节点。因此,您得到null,并且尝试将InnerText设置为null会产生异常。
我们真的需要看到nodeToMod和xml文件本身来提供进一步的帮助。另外,请发布代码而不是截图!
发布于 2010-09-28 01:10:43
确保您正在创建的FileStream对象不会输出为空。也许它找不到config.xml文件?
发布于 2010-09-28 01:13:09
SelectSingleNode的结果很可能是空的。
将该行更改为两行,将更容易在调试器中看到问题:
Dim node = xmlDoc.SelectSingleNode(dummy)
node.InnerText = newValuehttps://stackoverflow.com/questions/3806080
复制相似问题