#vb.net #html-agility-pack
#vb.net #html-agility-pack
Вопрос:
Есть ли способ использовать HtmlAgilityPack в html, который находится внутри <!-- -->
блоков комментариев? Например, как я могу настроить таргетинг на внутренний текст "//div.[@class='theClass']"
, который находится внутри такого блока:
<!-- <div class="theClass'>Hello I am <span class="theSpan">some text.</span> </div>-->
Так что я получаю
Hello I am some text.
Причина, по которой я спрашиваю, заключается в том, что я продолжал обнаруживать, что это продолжает возвращать значение NULL, потому div
что они находятся внутри комментариев:
htmlnodes = htmldoc.DocumentNode.SelectNodes("//div[@class='theClass']")
Ответ №1:
К сожалению, XPath обрабатывает содержимое узла комментариев как обычный текст, что означает, что вы не можете запрашивать содержимое так же, как обычные узлы.
Один из возможных способов — проанализировать содержимое узла комментариев как другое HtmlDocument
, чтобы вы могли запрашивать из него, например :
'get desired comment node'
Dim htmlnode As HtmlNode = htmldoc.DocumentNode.SelectSingleNode("//comment()[contains(., theClass)]")
Dim comment As New HtmlDocument()
'remove the outer <!-- --> so we have clean content'
comment.LoadHtml(htmlnode.InnerHtml.Replace("<!--", "").Replace("-->", ""))
'here you can use common XPath query again'
Dim result As HtmlNode = comment.DocumentNode.SelectSingleNode("//div[@class='theClass']")
'following line will print "Hello I am some text."'
Console.WriteLine(result.InnerText)
Комментарии:
1. Спасибо. Вышеуказанное работает, и вы ответили на мой вопрос.