我有一个函数可以传递一个字符串。在测试函数时,我在传递给它的字符串参数上得到一个空引用异常,即使该字符串不为null,我也不明白为什么我会收到此错误。我有一个屏幕截图
我使用了一个虚拟值来验证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:
知道了,愚蠢的错误。我将nodeToMod作为“UserName”而不是Set方法
中的“Username”传递 Set(ByVal value As String)
setValue("UserName", value.ToString)
_userName = value
End Set
答案 0 :(得分:5)
正在投诉的空引用是对SelectSingleNode
的调用的结果。也就是说,当通过连接/Config/
形成的xpath和nodeToMod
的内容针对文档进行评估时,没有节点匹配。所以你得到null,并且尝试设置null的InnerText
给出了异常。
我们真的需要看到nodeToMod
和xml文件本身来进一步帮助。另外,请发布代码而不是截图!
答案 1 :(得分:0)
确保您正在创建的FileStream对象不会出现null。也许它找不到config.xml文件?
答案 2 :(得分:0)
SelectSingleNode
的结果很可能为空。
将该行更改为两行,并且在调试器中更容易看到问题:
Dim node = xmlDoc.SelectSingleNode(dummy)
node.InnerText = newValue