Разделение строки HTML с помощью HtmlAgilityPack - PullRequest
1 голос
/ 30 марта 2020

У меня есть html код, подобный следующему:

<div class="classA">
Content
</div>
<div class="classA">
Content
</div>
 // another ClassA ....

 <div class="classA">
 <blockquote>Some key</blockquote >
 </div>

Как я могу удалить внешний HTML из Some key или получить весь html код выше class, который имел Some key с Html пакетом ловкости?

Это значит, что я хочу получить результат

 <div class="classA">
Content
</div>
<div class="classA">
Content
</div>
 // another ClassA ....

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

XPATH - ваш друг.

Возвращает ожидаемый результат всего одним запросом

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes(
   "//blockquote[text()='Some key']/parent::*/preceding::*"))
      Console.WriteLine(node.OuterHtml);

, где

  • //blockquote[text()='Some key'] выбирает элемент с требуемым ключом , Если оно должно быть в пределах <div class="classA">, используйте более точное выражение пути: //div[@class='classA']/blockquote[text()='Some key']
  • parent выбирает родительский элемент, а <div class="classA">
  • preceding выбирает все узлы до того, как данный узел

Демо: https://dotnetfiddle.net/BlQ3w9

0 голосов
/ 30 марта 2020

Похоже, вы хотите найти текст Some key, затем смотрите на родителей, пока не найдете элемент с классом classA, а затем удалите этот элемент> в DOM.

Вы можете найти элемент по внутреннему тексту: https://html-agility-pack.net/knowledge-base/14288183/find-the-parent-div-of-a-specific-text-in-a-htmldocument

Тогда вы можете захотеть l oop parent до null или вы найдете ParentNode.HasClass ('classA'). Вы также можете использовать Linq для Ancestors ().

В этот момент у вас есть элемент, который вы хотите удалить. Таким образом, вы можете использовать это, чтобы найти братьев и сестер ПОСЛЕ самого себя и удалить их.

...