2013-11-25 2 views
3

Symfony의 DomCrawler를 사용하여 부모 요소의 텍스트 노드를 선택할 수있는 방법이 있습니까?Symfony DomCrawler로 텍스트 노드 선택

jQuery를 당신이 contents() 방법을 사용할 수 있으며, 지금까지 내가 말할 수있는 nodeType == 3

+0

당신은'innerHtml()'과 같은 것을 html 태그로 나누고 싶습니까? 그게 바로''contents()'] (http://api.jquery.com/contents/)입니다. – nifr

답변

5

를 확인 심포니 크롤러는 텍스트 노드를 통과하는 것을 허용하지 않습니다. 크롤러가 일반적으로 사용되는 것에 대해 텍스트 노드만큼 깊숙이 들어가는 것은 아마도 너무 일반적이지 않습니다.

그러나 크롤러가 실제로 문서의 데이터를 저장하는 DOM 노드는 텍스트 노드 통과를 허용합니다. 당신은 크롤러의 (텍스트 노드를 포함하여) 모든 노드를 통해 루프를 원하는 경우 예를 들어

, (이미 하나 개의 결과까지 여과 가정)을 수행 할 수 있습니다 :

foreach ($crawler->getNode(0)->childNodes as $node) { 
    if ($node->nodeName === '#text') { 
     // you have a text node 
    } 
} 

몇 가지

  1. 호출 getNode()에 실제로 DOMNode (내 IDE에서 코드 완성을 나에게 DOMElement를 말하고 있지만, 기본 클래스이기 때문에 DOMNode는 안전한 내기) 반환, 그래서 그것은 밖으로 끌어 :주의해야 크롤러의 컨텍스트; 여기에서 DOMNode 속성과 메서드를 사용해야합니다.

  2. DOMNode의 속성은 요소의 HTML 태그 이름이지만 텍스트 노드의 경우 #text으로 설정되어있는 것으로 보입니다. 또는 $node instanceof DOMText을 사용하여 텍스트 노드를 감지 할 수도 있습니다.

나는이 질문이 더 오래되었음을 알고 있지만, 이것에 관해서도 문제가 있었으며, Google에서이 질문에 대한 답변을 얻고 싶었습니다.