如何获得具有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::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]")
似乎工作得很好。