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

XmlDocument.Load重载错误:如何从XML字符串提取属性值?

解决XmlDocument.Load(StringReader)时的非法路径字符错误

你遇到的问题很典型——VB.NET的重载解析在这里闹了个小乌龙,明明你传的是StringReader实例,却错误地匹配了接受文件路径字符串的Load(String)重载,导致它把你的XML字符串当成文件路径来解析,自然就抛出"路径中存在非法字符"的错误了。

最简单的修复方案:直接使用LoadXml方法

既然你已经有完整的XML字符串,完全不需要通过StringReader绕弯子,XmlDocument专门提供了LoadXml方法来直接加载XML字符串,彻底避免重载混淆的问题:

Dim Result As String
Dim ID As String
Dim doc As New Xml.XmlDocument()
' 直接加载XML字符串,无需StringReader
doc.LoadXml(XMLString)

' 直接获取SerRes节点并读取属性
Dim serResNode As Xml.XmlNode = doc.SelectSingleNode("SerRes")
If serResNode IsNot Nothing Then
    ID = serResNode.Attributes("RequestID").Value
    Result = serResNode.Attributes("OverallResult").Value
End If

为什么原来的代码会出错?

理论上doc.Load(sr)应该匹配接受TextReader的重载,但VB.NET的重载解析有时会因为隐式转换、变量类型歧义等问题出现意外。比如如果你的XMLString变量类型不是严格的String(比如是Object类型),可能会导致解析器误判。而LoadXml方法是专门为字符串XML设计的,不存在重载冲突的可能。

如果你坚持要用StringReader的修复方式

如果你一定要保留StringReader的写法,可以显式指定重载,确保StringReader的类型被正确识别:

Dim sr As New System.IO.StringReader(XMLString)
Dim doc As New Xml.XmlDocument()
' 显式调用接受TextReader的重载
DirectCast(doc, Xml.XmlDocument).Load(CType(sr, System.IO.TextReader))

不过这种写法完全没必要,还是用LoadXml更简洁直观。

内容的提问来源于stack exchange,提问作者Thomas Dutoit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:59:42