我正在尝试检查XML中是否存在节点“Key”,如果不是,我必须指定“No Node”。 下面是我正在使用的代码,但它会抛出错误
“对象引用未设置为对象的实例。”在我检查nodevalue对Nothing的行中。 如何检查XML节点是否存在?
Dim doc As New XmlDocument()
doc.Load(strPath)
'Create an XmlNamespaceManager for resolving namespaces.
Dim nsmgr As New XmlNamespaceManager(doc.NameTable)
nsmgr.AddNamespace("vvp", "http://schemas.abc.efg.IJ/zyx/")
'Fetch nodes
Dim MyRootNode As XmlNode = doc.SelectSingleNode("//vvp:provider", nsmgr)
If (MyRootNode("Key").InnerXml <> Nothing) Then
OrgCode = "No Node"
End If
答案 0 :(得分:1)
你可以这样做
Dim MyRootNode As XmlNode = doc.SelectSingleNode("//vvp:provider", nsmgr)
Dim keyNodelst As XmlNodeList=MyRootNode.SelectNodes(".//Key")
If (!keyNodelst.Count>0) Then
OrgCode = "No Node"
End If
或
Dim MyRootNode As XmlNode = doc.SelectSingleNode("//vvp:provider", nsmgr)
Dim keyNode As XmlNode=MyRootNode.SelectSingleNode(".//Key")
If (keyNode==null) Then
OrgCode = "No Node"
End If
对于xpath,请参阅http://msdn.microsoft.com/en-us/library/ms256086.aspx
答案 1 :(得分:1)
假如没有密钥,那么MyRootNode("Key")
就没有什么可以获得空引用异常的原因了?
我认为这个简单的修改应该有效:
If (MyRootNode("Key") is Nothing) Then
OrgCode = "No Node"
End If
(即我们删除了获取内部XML的尝试。)
答案 2 :(得分:0)
您可以再次使用SelectSingleNode方法尝试查找“Key”节点。如果您的变量为Nothing,则不存在。
有关详细信息,请参阅以下链接 http://social.msdn.microsoft.com/Forums/en/xmlandnetfx/thread/d7cbb3d3-6c1a-48fd-a2ab-40b9910fe453