我有一个应用程序,该应用程序在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必须在经过身份验证时从中出来,并且我不想对另一个流进行身份验证。
答案 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)