2017-10-24 6 views
1

를 사용하여 최종 HTML을 가져 오기 : 이제HTML에서 현재 노드를 제거하고 난 HTML 아래와 같이 가지고있는 DOMDocument PHP는

<table> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>Action</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>ABC</td> 
      <td><a data-permission="allow"></a></td> 
     </tr> 
     <tr> 
      <td>B</td> 
      <td><a data-permission="allow"></a></td> 
     </tr> 
     <tr> 
      <td>C</td> 
      <td><a data-permission="allow"></a></td> 
     </tr> 
     <tr> 
      <td>D</td> 
      <td><a data-permission="allow"></a></td> 
     </tr> 
     <tr> 
      <td>E</td> 
      <td><button type="button" data-permission="allow"></button></td> 
     </tr> 
    </tbody> 
</table> 

내가 (A, 버튼 등과 같은 속성을 "데이터 권한을"포함하는 노드를 발견하고 .) 위의 예제에서.
나는 아래 코드를 사용하고 있습니다. 지금 나는 노력하고있는 무엇이 그 전체 <a>..</a> or <button>...</button> 또는 그들이 "데이터 허가"속성을 포함하고 삭제 후에 만 ​​나머지 HTML를 돌려 보내는 경우에 다른 어떤 성분을 제거하기위한 것이다. 어떻게 달성 할 수 있을까요?

$dom = new DOMDocument; 
$dom->loadHTML($output); 

$xpath = new DOMXPath($dom); 
$nodes = $xpath->query('//@data-permission-id'); 
foreach ($nodes as $node) { 
    echo $node->nodeValue; 
    //$node->parentNode->removeChild($node); throws the error "Not Found Error" 
} 

참고 - $ node-> parentNode-> removeChild ($ node)를 시도했습니다. 루프 내부에 있지만 오류가 발생합니다. 또한 해당 태그를 삭제 한 후 나머지 HTML을 가져오고 싶습니다. 나는 How to delete element with DOMDocument?을 읽었지만 도움이되지 않습니다.

+0

, 내가 할 수있는 this by jQuery – GYaN

+2

[DOMDocument로 요소를 지우는 법?] 가능한 복제본 (https://stackoverflow.com/questions/15272726/how-to-delete-element-with-domdocument) – Michel

+0

(PHP 포함), 서버 측. @Michel, 나는 그것을 사용하여 $ node-> parentNode-> removeChild ($ node); 하지만 '발견되지 않은 오류'가 발생합니다. – DS9

답변

1

은 제거 할 노드의 값을 대체합니다 $node->nodeValue = "";

$dom = new DOMDocument; 
$dom->loadHTML($output); 
echo "Previous : ".PHP_EOL.$dom->textContent.PHP_EOL; 
$xpath = new DOMXPath($dom); 
$nodes = $xpath->query("//*[@data-permission='allow']"); 
foreach ($nodes as $node) { 
    $node->nodeValue = ""; 
    $dom->saveHTML(); 
} 

라이브 데모 : https://eval.in/885719

테이블 데이터와

라이브 데모 : https://eval.in/885780 당신이 또는 유일한 태그를 제거 할

+0

에 고맙게 생각합니다. 이제 질문이 1 개 더 있습니다. 텍스트 콘텐츠 대신 HTML을 얻는 방법? – DS9

+0

내 HTML을 사용하지 못했습니다. fiddle : https://eval.in/885743, https://eval.in/885752 – DS9

+0

현재 요소가 https://eval.in/885762를 대체하지만 https : // eval을 사용해야합니다. 인/885780 – C2486