-1

关于使用 msxml/IXMLDOMDocument 解析在线 HTML 页面的任何好的教程?

我需要使用 XPATH 表达式解析 HTML 页面。

很可能某些 HTML 页面不会 100% 有效,因此我需要将解析器配置为更“友好”或对此类页面不那么严格。

有任何想法吗?

4

1 回答 1

2

您可以使用 tidy 或 tidy 包装库来整理无效的 html。完成此操作后,您可以使用 MSXML 指定 xhtml 命名空间来解析 html。
EfTidy是一个很好的、最新的开源 tidy 包装器项目,用于整理 html。
我想展示一个用 VBScript 编写的示例,以使用 XPath 进行寻址以获取此问题的标题。

'EfTidy constants
Const XhtmlOut = 1
Const DoctypeLoose = 3 'for transitional

Dim EfTidy, sInvalidHTML, sValidHTML

With CreateObject("MSXML2.XMLHTTP.6.0")
    .open "GET", "http://stackoverflow.com/q/12027205/"
    .send
    sInvalidHTML = .responseText
End With

Set EfTidy = CreateObject("EfTidy.tidyCom")
With EfTidy.Option 'config
    .Clean = True
    .OutputType = XhtmlOut
    .DoctypeMode = DoctypeLoose
End With
sValidHTML = EfTidy.TidyMemToMem(sInvalidHTML)

With CreateObject("MSXML2.DomDocument.6.0")
    .async = False
    .validateOnParse = False
    .resolveExternals = True
    .setProperty "ProhibitDTD", False
    If .LoadXml(sValidHTML) Then
        .setProperty "SelectionLanguage", "XPath"
        .setProperty "SelectionNamespaces", "xmlns:xhtml='http://www.w3.org/1999/xhtml'"
        WScript.Echo .SelectSingleNode("//xhtml:div[@id='question-header']/xhtml:h1").Text
    End If
End With

希望能帮助到你。

于 2012-08-20T08:03:09.063 回答