XPath到第一次出現的文本長度> = 200個字符的元素

c# html html-agility-pack xpath

如何獲得具有200個或更多字符長度的內部文本(純文本,丟棄其他子項)的第一個元素?

我正在嘗試創建一個像Embed.ly這樣的HTML解析器,我已經建立了一個回退系統,我首先檢查og:description ,然後我會搜索這個事件,然後才搜索description元標記。

這是因為大多數甚至包含meta description描述的網站都會在該標記中描述其網站,而不是當前頁面的內容。

例:

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

我可以使用什麼選擇器來獲取該HTML片段的200個字符部分?我不想要更多的東西 ,我不關心它是什麼元素(除了<script><style> ),只要它是第一個包含至少200個字符的純文本。

XPath查詢應該是什麼樣的?

一般承認的答案

使用

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

注意 :如果文檔是XHTML文檔(這意味著所有元素都在xhrml命名空間中),則上面的表達式應指定為:

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

前綴"x:"必須綁定到XHTML命名空間 - "http://www.w3.org/1999/xhtml" (或許多XPath API稱之為 - 命名空間必須“ 註冊 ”與此字首)


熱門答案

我的意思是這樣的:

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

似乎工作得很好。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因