从Web浏览器组件读取XML

时间:2018-09-20 20:08:52

标签: xml vb.net webbrowser-control microsoft-dynamics

我有一个应用程序,该应用程序在NavUserPassword身份验证后为个人提供Web浏览器组件中XML页面的预览,然后显示将其解析为有意义数据的侧面板。但是,我似乎找不到找到通过字符串将所有XML导出到webbrowser组件中的有效方法。

未经身份验证的网页示例为https://services.odata.org/Northwind/Northwind.svc/

我在下面有这段代码,尽管它抛出一个MssingMemberExeption“找不到类型为'HTMLDocumentClass'的公共成员'XMLDocument'。”

Private Sub WebBrowserAuthEx1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowserAuthExt1.DocumentCompleted
    Dim doc As XmlDocument = New XmlDocument()
    doc.LoadXml(WebBrowserAuthExt1.Document.DomDocument.XMLDocument) ' I throw MssingMemberExeption
    MessageBox.Show(doc.Value.ToString)
End Sub

如何在Webbrowser中获取此XML DOM来提供所有XML?

它与普通的Web浏览器相同,但是XML必须在经过身份验证时从中出来,并且我不想对另一个流进行身份验证。

2 个答案:

答案 0 :(得分:1)

对于您提供的示例网址,您可以使用以下代码获取xml:

Dim xmlText As String = WebBrowser1.Document.All.Item(0).InnerText

编辑:OP指出(在被拒绝的编辑中),上面返回的文本在某些行上返回“-”。这是源被格式化为树结构而不是 pure XML的结果。他们的解决方案如下:

' It also includes the code folding dashes, use the below to sanitize the data.
If xmlText <> Nothing Then
    xmlText = xmlText.Replace("- ", "")
End If

Replace的这种用法可能会导致意外修改数据的风险,我只想提出以下替代方法,将可能的更改限制为仅行首。

Dim sb As New System.Text.StringBuilder(xmlText.Length)
Using sr As New System.IO.StringReader(xmlText)
    Do While sr.Peek <> -1
        Dim line As String = sr.ReadLine()
        Dim startOfLineIndex As Int32 = sb.Length
        sb.AppendLine(line)
        If sb.Chars(startOfLineIndex) = "-"c Then sb.Chars(startOfLineIndex) = " "c
    Loop
End Using
xmlText = sb.ToString()

答案 1 :(得分:0)

如果这是内置的System.Windows.Forms.WebBrowser控件,则可以使用DocumentText property获取网站的HTML(基本上是XML)代码。

doc.LoadXml(WebBrowserAuthExt1.DocumentText)