【问题标题】:Parsing online HTML pages using msxml/IXMLDOMDocument [closed]使用 msxml/IXMLDOMDocument 解析在线 HTML 页面 [关闭]
【发布时间】:2012-08-19 14:20:12
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

    标签: visual-c++ xhtml html-parsing msxml


    【解决方案1】:

    您可以使用 tidy 或 tidy 包装库来整理无效的 html。完成此操作后,您可以使用 MSXML 指定 xhtml 命名空间来解析 html。
    EfTidy 是一个很好的、最新的开源整理包装项目,用于整理 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
    

    希望对你有帮助。

    【讨论】:

    • +1,感谢您的建议,我会尝试 Eftidy 并在它起作用后接受您的回答。
    • 在 LoadXML 方法中我仍然有同样的错误:MSG_E_INVALIDATROOTLEVEL。在文档的顶层无效。有什么想法吗?
    • @rkosegi 我猜你正在用 C++ 开发,但我不熟悉 C++。不幸的是,我的 MSXML 经验只是使用 com 组件,而不是开发:)。最好添加一个c++ 标签,以便从 c++ 专家那里获得更多帮助。
    • 好的,我需要接受你的回答,问题出在我的网站上。谢谢!!!
    • 不客气。我很高兴能帮上忙。
    猜你喜欢
    • 2021-01-31
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2013-12-13
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    相关资源
    最近更新 更多