XPath до первого появления элемента с длиной текста> = 200 символов - PullRequest
5 голосов
/ 06 марта 2012

Как получить первый элемент, имеющий внутренний текст (простой текст, исключающий другие дочерние элементы) длиной 200 или более символов?

Я пытаюсь создать HTML-анализатор, такой как Embed.ly , и я настроил систему откатов, где я сначала проверяю на og:description, затем я буду искать это вхождение и только затем для метатега description.

Это потому, что большинство сайтов, которые даже включают meta description, описывают свой сайт в этом теге вместо содержимого текущей страницы.

Пример:

<html>
    <body>
        <div>some characters
            <p>200 characters <span>some more stuff</span></p>
        </div>
    </body>
</html>

Какой селектор я мог бы использовать, чтобы получить 200 символов часть этого фрагмента HTML? Я не хочу еще кое-что , мне все равно, что это за элемент (кроме <script> или <style>), если это первый простой текст, который содержит по крайней мере 200 символов.

Как должен выглядеть запрос XPath?

Ответы [ 3 ]

7 голосов
/ 06 марта 2012

Использование :

(//*[not(self::script or self::style)]/text()[string-length() > 200])[1]

Примечание : если документ является документом XHTML (и это означает, что все элементы находятся в пространстве имен xhrml),Вышеупомянутое выражение должно быть указано как:

(//*[not(self::x:script or self::x:style)]/text()[string-length() > 200])[1]

, где префикс "x:" должен быть связан с пространством имен XHTML - "http://www.w3.org/1999/xhtml" (или как многие API-интерфейсы XPath называют это - пространство имен должно быть " Зарегистрирован"с этим префиксом)

2 голосов
/ 06 марта 2012

Я имел в виду что-то вроде этого:

root.SelectNodes("html/body/.//*[(name() !='script') and (name()!='style')]/text()[string-length() > 200]")

Кажется, работает довольно хорошо.

0 голосов
/ 06 марта 2012

HTML не является XML.Вы не должны использовать парсеры XML для разбора периода HTML.Это совершенно разные вещи, и ваш парсер отключится в первый раз, когда вы увидите html, который неправильно сформировал XML.

Вы должны найти анализатор HTML с открытым исходным кодом, а не свой собственный.

...