XPath到第一次出现的文本长度> = 200个字符的元素

bev*_*qua 5 html c# xpath html-agility-pack

如何获得长度为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>
Run Code Online (Sandbox Code Playgroud)

我可以使用什么选择器来获取该HTML片段的200个字符部分?我不想要更多的东西,我不关心它是什么元素(除了<script><style>),只要它是第一个包含至少200个字符的纯文本.

XPath查询应该是什么样的?

Dim*_*hev 7

用途:

(//*[not(self::script or self::style)]/text()[string-length() > 200])[1]
Run Code Online (Sandbox Code Playgroud)

注意:如果文档是XHTML文档(这意味着所有元素都在xhrml命名空间中),则上面的表达式应指定为:

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

其中前缀"x:"必须绑定到XHTML名称空间 - "http://www.w3.org/1999/xhtml"(或许多XPath API调用此方法 - 名称空间必须使用此前缀"已注册 ")