如何读取SOAP XML数据并提取ERROR_CODE、PROPOSAL_NO及CoverDtl字段
问题根因
你现有代码无法提取节点的核心原因是未处理XML中的命名空间:
你提供的SOAP响应里,<GeneratePCCVProposalResponse>标签定义了默认命名空间xmlns="http://tempuri.org/",它下面的所有子节点(包括你要提取的PROPOSAL_NO、ERROR_CODE、CoverDtl)都属于这个命名空间。直接用不带命名空间前缀的XPath查询,只能匹配无命名空间的节点,所以会返回空。
解决代码
' 1. 加载SOAP响应XML Dim xmlDoc As New XmlDocument() xmlDoc.LoadXml("这里替换为你的SOAP响应字符串") ' 2. 注册命名空间,和XML中的定义对应 Dim nsManager As New XmlNamespaceManager(xmlDoc.NameTable) ' 注册SOAP命名空间 nsManager.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/") ' 注册业务接口的默认命名空间,自定义前缀为temp nsManager.AddNamespace("temp", "http://tempuri.org/") ' 3. 提取单个字段 Dim PROPOSAL_NO As String = xmlDoc.SelectSingleNode("//temp:PROPOSAL_NO", nsManager).InnerText Dim ERROR_CODE As String = xmlDoc.SelectSingleNode("//temp:ERROR_CODE", nsManager).InnerText ' 4. 提取所有CoverDtl节点的字段 Dim coverDtls As XmlNodeList = xmlDoc.SelectNodes("//temp:CoverDtl", nsManager) For Each dtl As XmlNode In coverDtls Dim CoverDesc As String = dtl.SelectSingleNode("temp:CoverDesc", nsManager).InnerText Dim Premium As String = dtl.SelectSingleNode("temp:Premium", nsManager).InnerText Dim Type As String = dtl.SelectSingleNode("temp:Type", nsManager).InnerText ' 此处可自行处理每个CoverDtl的字段值 Next
注意事项
可以在取InnerText前先判断节点是否不为Nothing,避免节点不存在时报空引用异常。
内容的提问来源于stack exchange,提问作者Huzefa
相关产品推荐
相关产品推荐

