2011-12-15 2 views
2

내 DOM에서 모든 text 노드를 쿼리하려고합니다. 그러나 HTML 태그 사이에 줄무늬가있는 "마크 업 줄 바꿈"을 원하지 않습니다. 있는 거 문자가 남아있는 경우 text() XPath 쿼리에서 linebreak-only textnodes를 제외하는 방법?

그래서 나는 to here을 따라 모든 공백을 번역하고 확인하기 위해 노력하고있어 :

/html/body//text()[not(translate(., '	

', '') = '')] 

이 작동하지 않습니다, 그것은 전년도 빈을 확인하는 것이 가능하지 솔기 않기 때문에 문자열 (텍스트 노드가 아니기 때문에 어떤 종류의 의미가 있는지).

이 노드를 필터링하는 다른 방법은 없습니까?

답변

3

사용는 :

/html/body//text()[normalize-space()] 

이 정상화 후 비어 있지 않은 문자열 값이 각각의 /html/body의 모든 텍스트 노드의 자손을 선택합니다.

상기 식 표준의 XPath 기능을 사용하는 모든 선행 및 후행 공백 문자가있는 또 하나 (NO 인수로 지정한 경우, 또는 문맥 노드의 스트링 값) 캐릭터를 받아 반환 normalize-space() 삭제되고 인접한 공백 문자의 중간 그룹은 단일 공백으로 대체되었습니다.

+0

xpath 2.0이 아닙니까? 현재 브라우저에서 작동합니까? –

+0

@AronWoost : 이것은 순수 XPath 1.0입니다 (확인하려면 링크를 클릭하십시오 :)) 그리고 모든 XPath 1.0 엔진에서 작동합니다. 따라서 현재 브라우저에서 작동해야합니다. –

+0

죄송합니다. 해당 링크가 표시되지 않았습니다. 솔루션을 가져 주셔서 감사합니다! 아주 간단한 해결책은 내가 2 시간 동안 인터 웹에서 뭔가를 찾는데 ....... –

관련 문제