XmlDocument.Load使用了错误的重载

时间:2018-05-26 14:19:43

标签: xml vb.net

从DLL我得到这个XML字符串(而不是文件):

<?xml version="1.0" encoding="UTF-8"?>
<SerRes RequestID="1" RequestType="GetStatus" OverallResult="ConnectionError">
</SerRes>

我想要的是RequestIDOverallResult的价值。

dim ID as string = ... (will be 1)
dim Result as string = ...    (will be ConnectionError)

我试过这个,但是我收到的错误是某些字符不正确。

Dim Result as string
Dim ID as string
Dim sr As New System.IO.StringReader(XMLString)
Dim doc As New Xml.XmlDocument
doc.Load(sr)
Dim reader As New Xml.XmlNodeReader(doc)
While reader.Read()
  Select Case reader.NodeType
    Case Xml.XmlNodeType.Element
    If reader.Name = "SerRes" Then
      Result = reader.GetAttribute("OverallResult")
      ID = reader.GetAttribute("RequestID")
    End If
  End Select
End While

我在第doc.Load(sr)

上收到以下错误
  

mscorlib.dll中发生了未处理的“System.ArgumentException”类型异常   附加信息:路径中的非法字符。

看起来VB出于某种原因选择.Load(String)而不是.Load(Stream)

有人能看到问题吗?

1 个答案:

答案 0 :(得分:6)

发生的情况是,如果不使用Option Strict On,编译器似乎已选择了XmlDocument.Load方法的wrong overload,以致它正在尝试读取文件。

启用Option Strict On以选择要从流中读取的correct overload

(选择严格的选项是一个好主意,作为新项目的默认设置 - Can I set Option Explicit and Option Strict on a Project/Solution level?处有更多相关信息)

顺便提一下,正如用户Slai在其他地方有用地指出的那样,VB.Net XML Axis Properties有一些漂亮的功能可以用来减少代码量并提高可读性:

Dim X = XElement.Parse(XMLString)
Dim ID$ = X.@RequestID
Dim Result$ = X.@OverallResult

为了避免评论中的信息丢失,用户TnTinMn告诉我们早期的VS2015版本充满了奇怪的错误,因此,如果这是用于编译代码的内容,可能这就是为什么它错了。