Читать XML из компонента веб-браузера - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть приложение, которое дает индивидуальный предварительный просмотр страницы XML в компоненте веб-браузера после аутентификации NavUserPassword, а затем показывает боковую панель, которая анализирует ее в значимые данные.Тем не менее, я не могу найти эффективный способ экспортировать весь XML из компонента веб-браузера через строку.

Пример веб-страницы без аутентификации: https://services.odata.org/Northwind/Northwind.svc/

У меня естьэтот код ниже, хотя он выдает MssingMemberExeption «Открытый член« XMLDocument »для типа« HTMLDocumentClass »не найден».

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

Как я могу получить этот XML DOM в веб-браузере, чтобы дать мне весь XML?

Это то же самое, что и обычный веб-браузер, но XML должен выходить из него, поскольку он аутентифицирован, и я не хочу аутентифицировать другой поток.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Для примера URL, который вы предоставили, вы можете получить 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()
0 голосов
/ 21 сентября 2018

Если это встроенный элемент управления System.Windows.Forms.WebBrowser, вы можете использовать свойство DocumentText , чтобы получить код HTML (в основном XML) веб-сайта.

doc.LoadXml(WebBrowserAuthExt1.DocumentText)
...