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
相关产品推荐
相关产品推荐

