【问题标题】:How to get the attribute value of the tag by attribute name with HTMLDocument object in VBA?如何在VBA中使用HTMLDocument对象通过属性名称获取标签的属性值?
【发布时间】:2018-04-19 06:00:22
【问题描述】:

我想用属性名称(“charset”)获取标签(“meta”)的所有属性值。 作为我的宏的结果,我希望看到:

1/4 element "charset" = UTF-8

但我明白了:

1/2 element "charset" = UTF-8
2/2 element "charset" = UTF-8

我哪里做错了?

Option Explicit

Sub ParseAnAttr()

    Dim MetaTags As String, i As Integer, j As Integer

    MetaTags = ""
    MetaTags = MetaTags & "<meta charset=""UTF-8""/> "
    MetaTags = MetaTags & "<meta name=""ResourceLoaderDynamicStyles"" content=""1""/> "
    MetaTags = MetaTags & "<script type=""text/javascript""> "
    MetaTags = MetaTags & "<meta name=""generator"" content=""Media""/> "
    MetaTags = MetaTags & "<meta name=""referrer"" content=""origin""/> "

    Dim objHtml As Object
    Set objHtml = CreateObject("htmlfile")

    With objHtml
        .Open
        .write MetaTags
        .Close
    End With

    Dim objElements As Object, objElement As Object
    Set objElements = objHtml.getElementsByTagName("meta")

    For Each objElement In objElements
        If objElement > 0 Then i = i + 1
    Next objElement

    For Each objElement In objElements
        For j = 0 To i - 1
            If objElement.Charset <> "" Then
                Debug.Print j + 1 & "/" & i & " element ""charset"" = " & objElement.Charset
            End If
        Next j
    Next objElement

End Sub

【问题讨论】:

    标签: html vba parsing dom


    【解决方案1】:

    &lt;meta&gt; 标签中间有一个未闭合的&lt;script&gt; 元素。这是故意的吗?而objElement.Charset 并没有按照你的想法做。

    试试这个:

    Sub ParseAnAttr()
    
        Dim MetaTags As String, att
        Dim objHtml As Object
        Dim objElements As Object, objElement As Object, j As Long
    
        MetaTags = "<meta charset=""UTF-8""/> " & _
            "<meta name=""ResourceLoaderDynamicStyles"" content=""1""/> " & _
            "<script type=""text/javascript"" ></script> " & _
            "<meta name=""generator"" content=""Media""/> " & _
            "<meta name=""referrer"" content=""origin""/> "
    
        Set objHtml = CreateObject("htmlfile")
    
        With objHtml
            .Open
            .write MetaTags
            .Close
            Set objElements = .getElementsByTagName("meta")
        End With
    
        j = 1
        For Each objElement In objElements
            att = objElement.getAttribute("charset")
            If att <> "" Then
                Debug.Print objElement.outerHTML
                Debug.Print j + 1 & "/" & objElements.Length & " element ""charset"" = " & att
            End If
            j = j + 1
        Next objElement
    
    End Sub
    

    【讨论】:

    • 非常感谢蒂姆·威廉姆斯!不,这不是故意的,但如果可能的话,跳过这些错误会很棒。应该有Debug.Print j 而不是Debug.Print j + 1 以获得正确的索引号。
    • 如果在 MetaTags 中添加“" 作为第六个元标记,则Debug.Print objElement.outerHTML 无法正常工作。
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2014-09-23
    • 2022-08-23
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多