Предполагая, что вы имеете дело с, возможно, не хорошо сформированной HTML, то tagsoup parser может быть вариант, так как он может разобрать malformatted (то есть «реальный» в том смысле, что много HTML-источника в Интернете плохо сформировано) html/xml source.
Следующий код использует TagSoup и заводную XmlSlurper для разбора ввода и проверок со списком допустимых имен тегов:
@Grab('org.ccil.cowan.tagsoup:tagsoup:1.2.1')
import org.ccil.cowan.tagsoup.Parser
def html = '''
<html>
<body>
<span>some content</span>
</body>
<not-allowed>some content</not-allowed>
</html>
'''
def document = new XmlSlurper(new Parser()).parseText(html)
def validTags = ['html', 'body', 'span']
def isValid = document.'**'.every { tag ->
println "${tag.name()} is ${tag.name()?.toLowerCase() in validTags ? '' : 'not '} allowed"
tag.name()?.toLowerCase() in validTags
}
println "\nVALID: $isValid"
производит:
html is allowed
body is allowed
span is allowed
not-allowed is not allowed
VALID: false
код использует XmlSlurper из заводных библиотек , Оператор **
выполняет depth first поиск по всем тегам в структуре xml, а вызов every
возвращает false, если какой-либо из выражений tag.name()?.toLowerCase() in validTags
возвращает false.
редактировать: если у вас есть хорошо сформированные HTML, вы можете использовать выше и просто заменить разбора строки с:
def document = new XmlSlurper().parseText(html)
и выйти из директивы @Grab
и import
в верхней части сценария ,
, пожалуйста, поделитесь своим кодом, относящимся к этому случаю. Не спрашивайте, прежде чем попробовать. – bxc00zzy
'String.contains (tag)'? У вас есть список, чтобы перебрать список ... Пожалуйста, см. [Ask] – AxelH
Мне нужно найти любые теги (если есть) НЕ из списка. Итерации, что? – Sergey