2010-06-19 1 views
0

사용 사례는 매우 간단합니다. 기본적으로 HTML 문서를 포함하고 삭제하는 문자열 (!)에서 xpath 문을 통해 노드를 찾고 싶습니다.PHP가있는 HTML 문서가 포함 된 문자열에서 xpath-> query를 사용하여 노드를 삭제하는 방법

나는 PHP로 노드를 찾는 방법을 알고있다. 기본적으로 다음과 같습니다. 새 DOMDocument 만들기 LoadHTML (또는 LoadXML) 새 DOMXpath를 만들고 "query"또는 "evaluate"메서드를 만듭니다. 끝난.

그러나 삭제는 까다로운 부분입니다. 하나의 문장을 가진 노드를 삭제하고 (그리고 parentNode-> removechild에서) 노드를 삭제하고 saveHTML을 사용하여 결과를 다시 문자열로 저장한다고 생각할 것이다. 불행히도이 작업은 거의 모든 시간에 원래 HTML 문자열에서 "너무 많은 것들"을 변환합니다.

내 질문은 지금입니다. saveHTML 또는 saveXML을 사용하지 않고 xpath-> query ($ query)에 의해 반환 된 노드를 어떻게 삭제할 수 있습니까? 그리고 내 파서를 쓰지 않고.

는이보고에 대한

감사합니다 :-) 충분히 명확했다 희망!

답변

0

우선 맨 아래와 위로부터 발견 된 노드를 제거했는지 확인하십시오. 이것은 부모 노드 이전에 자식 노드를 제거하는 것입니다.

둘째로, "많은 것들로 변환"한다는 것은 무엇을 의미합니까? PHP의 DOM XML은 문서를 DOM 노드 트리로 구문 분석합니다. 그런 다음 트리에서 작업하고 DOM 트리를 다시 XML/HTML로 변환합니다. 당신은 들여 쓰기를 아주 잘 할 수도 있고, 논쟁은 장소를 바꿀 수도 있습니다. 중요한 것은 문서가 정확히 똑같은 것을 의미합니다. 즉 DOM 트리의 XML/HTML 표현입니다. 빠른 답변

0

에밀 덕분

예, 당신은 맞다. 이것은 노드를 제거하고 작동하는 방식입니다.

HTML에서 STRING을 loadHTML/loadXML로 변환 -> xpath로 노드 식별 query -> DOM에서 노드 제거 (설명 된대로) -> DOM을 html STRING으로 변환 saveHTML/XML

그러나 문제는 saveHTML 이후의 출력이 대개 삭제 된 노드와 크게 다르다는 것입니다. 인수 위치 나 공백에 대해서는 신경 쓰지 않습니다. 그러나 때로는 사이트가 saveHTML 후에 브라우저에서 올바르게 렌더링되지 않습니다. 나는 브라우저가 완벽한 HTML 코드보다 덜 잘 다루는 것으로 의심한다 ...

내가 시도 할 수있는 또 다른 방법이있다 - saveHTML 외에?

최소한의 노력이 필요하지 않을 수도 있습니까? 어떻게 생각해?

+0

개별 답변에 응답하려면'add comment' 함수를 사용하십시오. 그래서 포럼처럼 작동하지 않습니다. 새로운 답변으로 의견을 제공하면 답변 작성자에게 알림이 전송되지 않습니다. 주석 기능을 사용하면 그는 그렇게 할 것입니다. – Gordon