如何检查XML节点是否存在

时间:2012-08-06 10:24:27

标签: asp.net .net xml vb.net

我正在尝试检查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

3 个答案:

答案 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