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

如何获得具有200个或更多字符长度的内部文本(纯文本,丢弃其他子项)的第一个元素?

我正在尝试创建一个像Embed.ly这样的HTML解析器,我已经建立了一个回退系统,我首先检查og:description ,然后我会搜索这个事件,然后才搜索description元标记。

这是因为大多数甚至包含meta description描述的网站都会在该标记中描述其网站,而不是当前页面的内容。

例:

   
some characters

200 characters some more stuff

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

XPath查询应该是什么样的?

使用

 (//*[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" (或许多XPath API称之为 – 命名空间必须“ 注册 ”与此字首)

我的意思是这样的:

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

似乎工作得很好。

HTML不是XML。 您不应该使用XML解析器来解析HTML周期。 它们完全是两个不同的东西,当你第一次看到不是格式良好的HTML时,你的解析器会窒息。

您应该找到一个开源HTML解析器,而不是自己滚动。