내부 텍스트 (일반 텍스트, 다른 자식 삭제)가있는 첫 번째 요소를 길이가 200 자 이상으로 가져 오는 방법은 무엇입니까?
나는 Embed.ly 와 같은 HTML 파서를 만들려고 노력하고 있는데 , 나는 og:description
먼저 확인한 다음이 발생을 검색하고 그 다음에는 description
메타 태그를 검색 할 폴백의 시스템을 설정했습니다.
이것은 meta description
포함 된 대부분의 사이트가 현재 페이지의 내용 대신 해당 태그에 사이트를 meta description
하기 때문입니다.
예:
<html>
<body>
<div>some characters
<p>200 characters <span>some more stuff</span></p>
</div>
</body>
</html>
HTML 조각의 200 문자 부분을 가져 오기 위해 어떤 선택자를 사용할 수 있습니까? 나는 적어도 200 문자를 포함하는 첫 번째 일반 텍스트 인 한 좀 더 많은 것들을 원하지 않는다. ( <script>
또는 <style>
제외하고) 어떤 요소인지 신경 쓰지 않는다.
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]")
꽤 잘 작동하는 것 같습니다.