【问题标题】:VBA Parsing XML contained in HTMLpage from IE DocumentVBA解析来自IE文档的HTML页面中包含的XML
【发布时间】:2015-08-20 03:31:53
【问题描述】:

我有一个 VBA 程序,它使用 IE 自动化以经典方式查询网站: 常量 URL = "xxxx" Dim ieApp 作为 InternetExplorer 将 oHTMLDoc 调暗为 HTMLDocument

ieApp.Navigate URL
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

Set oHTMLDoc = ieApp.Document
.....etc

由于某些原因,我必须使用 InternetExplorer 对象 - 我不能使用 MSXML2 库来查询站点。稍后在程序中,查询的结果是纯 XML - 使用 HTML 例程进行解析很痛苦。

所以我的问题很简单:如何将 HTMLDocument 转换为 MSXML2.DOMDocument ?

Dim oXMLDoc As MSXML2.DOMDocument
Set oXMLDoc = oHTMLDoc  'Fails

谢谢。

【问题讨论】:

  • 如果查询返回纯 XML,那么您可以对那部分使用 MSXML...
  • 谢谢蒂姆 - 我明白,但这是我的问题:我该怎么做?我需要使用 IE 和 oHTMLDoc 进行身份验证,如何切换到 MSXLM 进行进一步查询?使用 XMLHTTP 的打开/发送返回“未通过身份验证”。
  • 我不清楚这里的实际工作流程。在通过 IE 的正常操作中,浏览器对作为纯 XML 发送的内容做了什么?
  • 我正在访问 HP Agile Manager 服务器。登录的建议是将 REST_API 与 XMLHTTP 类型的请求一起使用 - 一旦您进行身份验证,您就会收到每个查询的纯 XML。不幸的是,我没有成功使用 res_api 进行身份验证(我知道,这是正确的方法...... ) 所以我使用 IE 登录,但是当回复是纯 XML 时我被卡住了。当然,我可以通过 HTML DOM……但这并不实际。所以我的问题。希望这可以澄清!
  • 我认为弄清楚如何使用 MSXML 对 REST API 进行身份验证可能比继续使用 IE 更容易......

标签: xml vba internet-explorer


【解决方案1】:

感谢jdweng,我得到了答案:

Dim ieApp As InternetExplorer
Dim oHTMLDoc As HTMLDocument
Dim sXML as String 

ieApp.Navigate *URL*
Do While ieApp.Busy: DoEvents: Loop
Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop

Set oHTMLDoc = ieApp.Document
Set oXML = New MSXML2.DOMDocument60

sXML = oHTMLDoc.DocumentElement.outerHTML
If Not oXML.LoadXML(sXML) Then _
    Err.Raise oXML.parseError.ErrorCode, , oXML.parseError.reason

我可以在我的 oXML 文档中享受 XML!再次感谢。

【讨论】:

    【解决方案2】:

    试试这个

    'add reference Microsoft XML, v6.0
    Public Sub DownloadFile()
        Dim objWHTTP As Object
        Dim strPath As String
        Dim arrData() As Byte
        Dim lngFreeFile As Long
    
    
    
        On Error Resume Next
            Set objWHTTP = CreateObject("WinHTTP.WinHTTPrequest.5")
            If Err.Number <> 0 Then
                Set objWHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")
            End If
        On Error GoTo 0
    
        URL = "Enter URL Here"
    
        objWHTTP.Open "GET", URL, False
        objWHTTP.send
        arrData = objWHTTP.responseBody
        strData = StrConv(arrData, vbUnicode)
    
        Dim fedbook As New MSXML2.DOMDocument60
    
        fedbook.LoadXML strData
    ​
    

    【讨论】:

    • 谢谢jdweng。不幸的是,这对我不起作用。我必须从 IE 和 oHTML 文档开始 - 我无法切换到 WinHTTP Get,因为我丢失了身份验证令牌。问题是如何从 HTMLDocument 到 XML 文档。
    • 您需要查看网页的来源以确定 XML 包含哪些标签。通常我会手动使用 IE 访问网页,然后使用菜单选择 View : Source。或者将网页下载到计算机上的文件并使用文本编辑器查看文件。您甚至可以查看下载文档中的 OutterXML。
    • 好的 - 它看起来像:
    • - - - -requirement
    • 一旦你得到了你发布的 XML 字符串,那么你可以像我的例子一样使用 LoadXML 方法。我使用 strData 作为我的字符串。如果你得到字节,然后像我的例子一样使用 StrConv 进行转换。
    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 2014-07-05
    • 2019-09-26
    • 1970-01-01
    • 2014-10-06
    • 2013-02-06
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多