从网络浏览器组件读取 XML
Read XML from a webbrowser component
我有一个应用程序,可以在 NavUserPassword 身份验证后为个人提供网络浏览器组件中 XML 页面的预览,然后显示一个将其解析为有意义数据的侧面板。但是,我似乎无法找到一种有效的方法来通过字符串将所有 XML 从 webbrowser 组件中导出。
未经身份验证的网页示例是,https://services.odata.org/Northwind/Northwind.svc/
我在下面有这段代码,尽管它会抛出 MssingMemberExeption "Public member 'XMLDocument' on type 'HTMLDocumentClass' not found."
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 必须从中出来,因为它已经过身份验证,我不想验证另一个流。
如果这是内置的 System.Windows.Forms.WebBrowser
控件,您可以使用 DocumentText
property 获取网站的 HTML(基本上是 XML)代码。
doc.LoadXml(WebBrowserAuthExt1.DocumentText)
对于您提供的示例Url,您可以使用类似以下代码的方式获得xml:
Dim xmlText As String = WebBrowser1.Document.All.Item(0).InnerText
编辑:OP 指出(在被拒绝的编辑中)上面 returns 返回的文本在某些行上有一个“-”。这是源被格式化为树结构而不是 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()
我有一个应用程序,可以在 NavUserPassword 身份验证后为个人提供网络浏览器组件中 XML 页面的预览,然后显示一个将其解析为有意义数据的侧面板。但是,我似乎无法找到一种有效的方法来通过字符串将所有 XML 从 webbrowser 组件中导出。
未经身份验证的网页示例是,https://services.odata.org/Northwind/Northwind.svc/
我在下面有这段代码,尽管它会抛出 MssingMemberExeption "Public member 'XMLDocument' on type 'HTMLDocumentClass' not found."
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 必须从中出来,因为它已经过身份验证,我不想验证另一个流。
如果这是内置的 System.Windows.Forms.WebBrowser
控件,您可以使用 DocumentText
property 获取网站的 HTML(基本上是 XML)代码。
doc.LoadXml(WebBrowserAuthExt1.DocumentText)
对于您提供的示例Url,您可以使用类似以下代码的方式获得xml:
Dim xmlText As String = WebBrowser1.Document.All.Item(0).InnerText
编辑:OP 指出(在被拒绝的编辑中)上面 returns 返回的文本在某些行上有一个“-”。这是源被格式化为树结构而不是 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()