1

我正在尝试检查 XML 中是否存在节点“密钥”,如果没有,我必须指定“无节点”。下面是我正在使用的代码,但它抛出了错误

“你调用的对象是空的。” 在我对照Nothing检查nodevalue的那一行。如何检查 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
4

3 回答 3

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

于 2012-08-06T10:54:27.360 回答
1

大概如果没有键,那么MyRootNode("Key")什么都不是,这就是为什么你得到空引用异常?

我原以为这个简单的修改应该可以工作:

If (MyRootNode("Key") is Nothing) Then
    OrgCode = "No Node"
End If

(即我们删除了获取内部 XML 的尝试)。

于 2012-08-06T11:07:27.817 回答
0

您可以再次使用 SelectSingleNode 方法来尝试找到您的“关键”节点。如果您的变量为 Nothing,则它不存在。

有关详细信息,请参阅以下链接 http://social.msdn.microsoft.com/Forums/en/xmlandnetfx/thread/d7cbb3d3-6c1a-48fd-a2ab-40b9910fe453

于 2012-08-06T10:44:40.117 回答