VBA从IE文档解析HTMLpage中包含的XML

VBA从IE文档解析HTMLpage中包含的XML,xml,vba,internet-explorer,Xml,Vba,Internet Explorer,我有一个VBA程序,它使用IE自动化以经典方式查询网站: Const URL=“xxxx” Dim ieApp作为InternetExplorer 作为HTMLDocument的Dim oHTMLDoc ieApp.Navigate URL Do While ieApp.Busy: DoEvents: Loop Do Until ieApp.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop Set oHTMLDoc = ieApp.Documen

我有一个VBA程序,它使用IE自动化以经典方式查询网站: Const URL=“xxxx” Dim ieApp作为InternetExplorer 作为HTMLDocument的Dim oHTMLDoc

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
谢谢。

试试这个

'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
​
“添加引用Microsoft XML,v6.0”
公共子下载文件()
作为对象的Dim objWHTTP
将strPath设置为字符串
将数据()设置为字节
Dim lngFreeFile的长度为
出错时继续下一步
设置objWHTTP=CreateObject(“WinHTTP.WinHTTPrequest.5”)
如果错误号为0,则
设置objWHTTP=CreateObject(“WinHTTP.WinHTTPrequest.5.1”)
如果结束
错误转到0
URL=“在此处输入URL”
objWHTTP.Open“GET”,URL,False
objWHTTP.send
arrData=objWHTTP.responseBody
strData=StrConv(arrData,vbUnicode)
Dim fedbook作为新的MSXML2.DOMDocument60
fedbook.LoadXML标准数据
​

多亏了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!再次感谢。

如果查询返回纯XML,那么您可以使用MSXML进行该部分…谢谢Tim-我理解这一点,但这是我的问题:我如何才能做到这一点?我需要使用IE和oHTMLDoc进行身份验证,如何切换到MSXLM进行进一步查询?带有XMLHTTP的Open/Send返回“未验证”。我不清楚这里的实际工作流程。在通过IE的正常操作中,浏览器对纯XML发送的内容做了什么?我正在访问HP Agile Manager服务器。登录的建议是使用REST_API和XMLHTTP类型的请求-一旦您进行身份验证,您就会收到每个查询的纯XML。不幸的是,我没有成功地使用res_API进行身份验证(我知道,这是正确的方式…),所以我使用IE登录,但当回复是纯XML时,我就卡住了。当然,我可以浏览HTMLDOM…但这并不实际。所以我的问题是。希望这能澄清!我认为,与继续使用IE相比,找出如何使用MSXML对REST API进行身份验证的工作可能要少一些……谢谢jdweng。不幸的是,这对我不起作用。我必须从IE和oHTML文档开始—我无法切换到WinHTTP Get,因为我丢失了身份验证令牌。问题是如何从HTMLDocument转换成XML文档。您需要查看网页的源代码,以确定XML用什么标记包装。通常我会用IE手动进入网页,然后使用菜单选择View:Source。或者将网页下载到计算机上的文件中,并使用文本编辑器查看文件。您甚至可以查看下载文档中的OutterXML。好吧,它看起来是这样的:---要求一旦您获得了您发布的XML字符串,那么您就可以使用我的示例中的LoadXML方法。我使用strData作为字符串。如果您得到的是字节,则使用StrConv进行转换,如我的示例中所示。