C#读取SOAP XML节点返回Null值问题求助
解决SOAP XML中CDATA内节点无法通过XPath获取的问题
你的问题核心是目标节点被包裹在CDATA块中,XmlDocument会将CDATA内容识别为纯文本而非可解析的XML结构,直接用//SERVICIO/TIPO_USUARIO这类XPath自然无法定位到节点,返回null是必然结果。
解决步骤
- 从SOAP XML中提取
<xmlentrada>节点内的CDATA文本内容; - 将提取的文本加载为独立的XmlDocument对象;
- 在新的XmlDocument中使用XPath查找目标节点。
修改后的C#代码
XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xmlString); // 提取xmlentrada节点内的CDATA文本 XmlNode xmlEntradaNode = xmlDocument.SelectSingleNode("//xmlentrada"); string innerXmlContent = xmlEntradaNode.InnerText; // 将CDATA内的文本加载为新的XML文档 XmlDocument innerDoc = new XmlDocument(); innerDoc.LoadXml(innerXmlContent); // 查找目标节点并处理 XmlNode tipoUsuarioNode = innerDoc.SelectSingleNode("//SERVICIO/TIPO_USUARIO"); if (tipoUsuarioNode != null) { string tipoUsuarioValue = tipoUsuarioNode.InnerText; // 填充NOMBRE_REMITENTE等其他节点示例 XmlNode nombreRemitenteNode = innerDoc.SelectSingleNode("//SERVICIO/NOMBRE_REMITENTE"); if (nombreRemitenteNode != null) { nombreRemitenteNode.InnerText = "待填充的寄件人名称"; } // 若需要同步修改原SOAP XML,将修改后的内容放回xmlentrada节点 xmlEntradaNode.InnerText = innerDoc.OuterXml; }
补充提示
- 处理时务必添加空值判断,避免空引用异常;
- 如果需要修改原SOAP XML中的CDATA内容,记得将修改后的
innerDoc.OuterXml重新赋值给xmlEntradaNode.InnerText。
内容的提问来源于stack exchange,提问作者Reyneer Leon
相关产品推荐
相关产品推荐

