2012-05-17 2 views
0

내가 내 DOM 트리를 얻는 방법 :DOM 도전 -> 모든 요소가 아닌 텍스트를 가져옵니다 여기

$html = file_get_contents('somefile.html'); 
$dom = new DOMDocument(); 
@$dom->loadHTML($html); 
$dom_document = new DomXPath($dom); 
$dom_object = $dom_document->query('somePathHere'); 

는 $의 dom_object의 HTML 구조 : 여기

<div> 
    <a href='something'>some text here</a> 
    I want this 
</div> 

을 필요 :

정밀도 : 여러 xpath 쿼리를 작성하지 않아도됩니다. 나는 내 것을 고수하고 싶다 ... 미리 감사드립니다. 건배. 마크

+0

div에 이름 또는 ID가 있습니까? 그렇지 않다면 div 태그가 항상 같은 순서로 나타나는 순서입니다 (항상 두 번째 div가 열리는 것과 같습니다). – Ahatius

+0

안녕하세요 Ahatius. div 태그에는 ID가없고 구조는 항상 동일합니다 ... – Marc

+0

@Ahatius가 div에 ID를 추가하면 텍스트를 가져올 수 있다고 했으므로 – MahanGM

답변

0

사용 nodeType에 텍스트 노드를 얻을 수 있습니다 :

foreach($nodes as $node) { 
    if($node -> nodeType == 3) { 
     echo $node -> nodeValue . "<br />"; 
    } 
} 

설명 : PHP는 DOMDocument를에서, 텍스트는 노드 안에 있습니다. 귀하의 경우, PHP의 XML_NODE_CONSTANTS 자세한 내용은

에 따라 3을 의미하는 텍스트 노드입니다 : http://www.php.net/manual/en/class.domnode.php

+0

내 노드의 유형이 1 ... 그래서 당신이 제안하지 않는 것이 작동하지 않습니다. – Marc

0

나는 당신의 XML의 예상 구조를 모르겠지만,이 특정 요청에 대해 작동합니다

/html/body/div/text() 

문제의 div의 바로 위 부모와 텍스트 노드 만 선택합니다. 일반적으로 //div/text()을 사용할 수도 있지만 더 구체적인 쿼리는 일반적으로 더 빠르거나 빠릅니다.

+0

Hello Explosion Pills ... 도와 줘서 고맙습니다. 그럼에도 불구하고, 언급으로 여러 xpath 쿼리를 가질 필요가없는 솔루션을 찾고 있습니다 ... – Marc

+0

제 대답을 다시 읽으십시오. 이러한 쿼리 중 * *를 사용할 수 있습니다. 둘 다 필요하지 않습니다. –

관련 문제