You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Basic中无法获取XML元素值,复杂XML下如何提取item节点内容?

VB中无法选中XML元素的解决方案

你的代码存在两个核心问题导致无法获取预期的XML元素值:未处理默认命名空间和错误直接输出XmlNodeList对象,以下是针对性的修复方案:

1. 补充默认命名空间的处理

你的XML片段中,ds_rl_contactpersonen_result、fields、item及其所有子元素都属于urn:EfDataService这个默认命名空间,必须将该命名空间添加到NamespaceManager中,XPath才能正确定位这些节点。

修改命名空间配置及XPath语句:

' 命名空间管理器配置
nsmgr = New XmlNamespaceManager(xmlDoc.NameTable)
nsmgr.AddNamespace("SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/")
' 给默认命名空间添加别名(比如ef)
nsmgr.AddNamespace("ef", "urn:EfDataService")

' 修正XPath,默认命名空间下的节点需加ef:前缀
nodelist = xmlDoc.SelectNodes("//SOAP-ENV:Body/ef:ds_rl_contactpersonen_result/ef:fields/ef:item/ef:rl_contactpersonen_relatieregistratienr", nsmgr)

2. 正确遍历并输出节点内容

直接打印XmlNodeList对象只会输出它的类型名称(System.Xml.XPathNodeList),需要遍历节点列表,获取每个节点的文本内容:

' 遍历节点列表,输出每个节点的文本值
For Each node In nodelist
    Console.WriteLine(node.InnerText)
Next

完整修复后的代码

Dim node As XmlNode
Dim nodelist As XmlNodeList
Dim nsmgr As XmlNamespaceManager
Dim xmlDoc As New XmlDocument()

xmlDoc.Load("C:\Users\turin\Downloads\contactpersonen.xml")

' 配置命名空间管理器
nsmgr = New XmlNamespaceManager(xmlDoc.NameTable)
nsmgr.AddNamespace("SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/")
nsmgr.AddNamespace("ef", "urn:EfDataService")

' 定位目标节点
nodelist = xmlDoc.SelectNodes("//SOAP-ENV:Body/ef:ds_rl_contactpersonen_result/ef:fields/ef:item/ef:rl_contactpersonen_relatieregistratienr", nsmgr)

' 遍历输出节点内容
For Each node In nodelist
    Console.WriteLine("关联登记号: " & node.InnerText)
Next

扩展:获取item节点下的所有内容

如果需要获取每个item节点下的全部子元素内容,可以先定位所有item节点,再遍历其子节点:

' 选中所有item节点
nodelist = xmlDoc.SelectNodes("//SOAP-ENV:Body/ef:ds_rl_contactpersonen_result/ef:fields/ef:item", nsmgr)

For Each itemNode As XmlNode In nodelist
    Console.WriteLine("===== 联系人信息 =====")
    For Each childNode As XmlNode In itemNode.ChildNodes
        If childNode.NodeType = XmlNodeType.Element Then
            Console.WriteLine($"{childNode.LocalName}: {childNode.InnerText}")
        End If
    Next
    Console.WriteLine()
Next

内容的提问来源于stack exchange,提问作者Chris Turindwa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:35:40