Получение текста из узла с использованием HtmlAgilityPack - PullRequest
1 голос
/ 01 ноября 2010

У меня есть следующий HTML:

<div class="top">
    <p>Blah.</p>
    I want <em>this</em> text.
</div>

Что такое нотация XPath для извлечения строки "I want <em>this</em> text."? РЕДАКТИРОВАТЬ: я не обязательно хочу одно выражение XPath для извлечения строки. Также было бы неплохо выбрать несколько узлов и перебрать их, чтобы получить предложение.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(myHtml);
doc.DocumentNode.SelectSingleNode("??????");

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010
/div[@class='top']/p[.='Blah.']/following-sibling::node()

или

/div[@class='top']/node()[not(self::p)]
1 голос
/ 02 ноября 2010

Что вы хотите извлечь, узлы или строку?

Если вы хотите узлы, "I want <em>this</em> text." - это фрагмент XML, состоящий на верхнем уровне двух текстовых узлов и <em>элемент , который имеет дочерний текстовый узел.Поскольку он имеет несколько узлов на верхнем уровне, вам нужно использовать SelectNodes("xpath expression a la @Alejandro") вместо SelectSingleNode() для их извлечения.

Если вы хотите строку, снова вам нужно использовать SelectNodes ();а затем выполнить итерацию по выбранным узлам и объединить externalHTML каждого из них.См. здесь для хорошего примера чего-то подобного.

Кроме того, из вашего примера немного неясно, что выражение XPath в целом даст вам то, что вы хотите.Например, вы хотите все после начального <p>...</p> под <div class="top">?Или вам нужен весь текст под <div>, кроме all <p> элементов?Или может что-то еще?Конечно, если у вас работают выражения @ Alejandro для XPath, то это уже достаточно точно указано.

...