Excel VBA очищает теги img от атрибутов - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть html код в строке Excel, которая содержит несколько тегов, подобных этому:

<img alt="glass" data-lazy-sizes="(max-width: 785px) 100vw, 785px" data-lazy-src="https://example.com/wp-content/uploads/2020/01/glass.jpg" data-lazy-srcset="https://example.com/wp-content/uploads/2020/01/glass-50x25.jpg 50w, https://example.com/wp-content/uploads/2020/01/glass-200x102.jpg 200w, https://example.com/wp-content/uploads/2020/01/glass-300x153.jpg 300w, https://example.com/wp-content/uploads/2020/01/glass-400x204.jpg 400w, https://example.com/wp-content/uploads/2020/01/glass-600x306.jpg 600w, https://example.com/wp-content/uploads/2020/01/glass-768x391.jpg 768w, https://example.com/wp-content/uploads/2020/01/glass.jpg 785w" height="400" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20785%20400'%3E%3C/svg%3E" width="785" />

, и мне нужно создать пользовательскую функцию для удаления всех атрибутов, кроме alt и data-lazy-sr c, чтобы быть таким:

<img alt="glass" data-lazy-src="https://example.com/wp-content/uploads/2020/01/glass.jpg" />

Я попробовал регулярное выражение безуспешно (это возможно, но сложно и не рекомендуется). Сейчас я использую html синтаксический анализ.

Мой первоначальный подход заключается в следующем:

Function clearIMGattributes(content As String) As String
    Dim doc As MSHTML.HTMLDocument
    Set doc = New MSHTML.HTMLDocument
    Dim documentIMGs As MSHTML.IHTMLElementCollection

    Set documentIMGs = Table.getElementsByTagName("img")

    For Each documentIMG In documentIMGs
        'Here I should check all the attributes
        'and remove those that are not src and alt
        'and next is to somehow apply changes in variable doc
        'but I honestly don't know how to perform
        'these steps

    Next documentIMG

    clearIMGattributes = doc
End Function

Более чем уверен, что другой подход будет проще.

Любая помощь будет оценен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...