2017-11-06 9 views
0

属性名( "charset")を持つタグ( "meta")のすべての属性値を取得します。 私のマクロの結果として、私は見ることが予想さ:VBAでHTMLDocumentオブジェクトを使用して属性名でタグの属性値を取得するにはどうすればよいですか?

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 

答えて

1

あなた<meta>タグの途中で閉じられていない<script>要素を持っています。それは意図的なのでしょうか?そして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 
+0

はあなたに多く、ティム・ウィリアムズをありがとうございました!いいえ、それは意図的なものではありませんが、可能であれば、間違いをスキップすることは素晴らしいことです。正しいインデックス番号を取得するには 'Debug.Print j + 1'の代わりに' Debug.Print j'が必要です。 –

+0

6番目のメタタグとしてMetaTagsの ""を追加すると、 'Debug.Print objElement.outerHTML'が正しく機能しません。 –

関連する問題