当前位置 : 主页 > 编程语言 > c语言 >

XmlDocument.Load使用了错误的重载

来源:互联网 收集:自由互联 发布时间:2021-06-24
从DLL我得到这个 XML字符串(而不是文件): ?xml version="1.0" encoding="UTF-8"?SerRes RequestID="1" RequestType="GetStatus" OverallResult="ConnectionError"/SerRes 我想要的是RequestID,OverallResult的值. dim ID as string =
从DLL我得到这个 XML字符串(而不是文件):

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

我想要的是RequestID,OverallResult的值.

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)上收到以下错误

An unhandled exception of type ‘System.ArgumentException’ occurred in mscorlib.dll
Additional information: Illegal characters in path.

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

有人能看到问题吗?

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

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

(将Option Strict On作为新项目的默认值是一个好主意 – 在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版本充满了奇怪的错误,因此,如果这是用于编译代码的东西,那么这可能就是它错误的原因.

网友评论