2013-12-08 5 views
4

PHP에서 XPath를 사용하여 HTML 문서의 일부를 검색하고 있습니다. 내 HTML 문서는 다음과 같이 보인다고 가정 :PHP의 XPath가 HTML 태그를 제거합니다.

<html> 
    <head> 
    </head> 
    <body> 
     <div id="first"> 
      <a href="some_link_address.com">Hello</a> 
      <p>Some text here</p> 
     </div> 
     <div id="second"> 
      <p>Some other text here</p> 
      <img src="src/to/image.jpg" /> 
     </div> 
    </body> 
</html> 

그리고 XPath를 호출을 포함하여 내 PHP는 : 나는 결과 DOM에 포함될 것으로 예상하고 있었다

$result_dom = new DOMDocument('1.0', 'utf-8'); 
$node_to_keep = $xpath->query("//div[@id='first']"); 

foreach ($nodes_to_keep as $node) { 

    $element = $result_dom->createElement('div', $node->nodeValue;); 
    $result_dom ->appendChild($element); 
} 

다음

<div> 
    <a href="some_link_address.com">Hello</a> 
    <p>Some text here</p> 
</div> 

그러나이 결과는 dom입니다

<div> 
    Hello 
    Some text here 
</div> 

그럼 내 질문은 어떻게 HTML을 포함하도록 결과 dom을 설정합니까? 나는 그들을 제거 싶지 않아

고마워.

답변

2

요소의 "nodeValue"는 해당 요소의 텍스트 내용입니다. 문서의 텍스트 노드에는 <...> 등이 포함되지 않으며 해당 요소 사이 및 그 사이의 텍스트 만 포함됩니다. 새로운 요소에서 얻은 모든 것입니다.

대신 수동으로 노드를 만드는 결과 노드의 깊은 사본을 가져오고 그 추가 :

$importedNode = $result_dom->importNode($node, true); 
$result_dom->appendChild($importedNode); 
관련 문제