PHP Simple HTML DOM을 사용하여 다음 HTML로 웹 페이지를 구문 분석합니다. 각 <li>
에 여분의 </span>
태그가 있음을 확인하십시오.PHP 간단한 HTML DOM 파서가 잘못된 데이터를 나타냄
<li>
<span class="name">
<a href="">Link</a> asdasd
</span>
</span>
</li>
<li>
<span class="name">
<a href="">Link</a> asdasd2
</span>
</span>
</li>
내 쿼리는 다음과 같습니다
$lis = $dom->find('li');
foreach ($lis as $li) {
$spans = $li->find('span');
foreach ($spans as $span) {
echo $span->plaintext."<br>";
}
}
내 출력은 다음과 같습니다
Link asdasd
Link asdasd2
-----------
Link asdasd2
-----------
당신이 find('span')
첫 번째 <li>
에 아이들과 같이 두 개의 스팬을 찾아서로부터 값을 얻는 볼 수 있듯이 다음 <span>
은 찾을 수 있습니다 (다음 <li>
의 자식 임에도 불구하고). 후행 </span>
을 제거하면 문제가 해결됩니다.
내 질문 있습니다
왜 이런 일이?
이 특별한 경우를 어떻게 해결할 수 있습니까? 다른 모든 것은 잘 돌아가며 스크립트에 큰 변화를 줄 수있는 위치에 있지 않습니다. 필요한 경우 DOM 쿼리를 쉽게 변경할 수 있습니다.
나는 시작을 계산하고 태그를 폐쇄하고 너무 많이가있는 경우 하나의 </span>
을 제거에 대해 생각하고있다. 그들은 항상 <span>
s이 될 것이므로, regexp로 그것을 확인하는 현명한 방법이 있습니까?
$e->getElementById(x);
$e->getElementsById(x);
$e->getElementByTagName(x); and
$e->getElementsByTagName(x);
를 첫 번째 호출에서이 마지막 호출의 사용한다 :
1. 쓰레기 입력, 쓰레기 출력. 당신이 사용하는 수업은 주장만큼 견고하지 못합니다. 2.이 경우 HTML을 수정하십시오. 좀 더 일반적인 경우에는보다 견고한 HTML 파서를 사용하십시오. [DOMDocument] (http://php.net/manual/en/class.domdocument.php) –
DOMDocument에서이 작업을 시작했는데, 결국 문자열 길이를 비교해야하는 오류가 발생하여 데이터를 일반 텍스트로 가져올 수 없었습니다. 노드 데이터에는 많은 쓰레기와 태그가 포함되어 있습니다. 이것은 훨씬 쉬워 보였다. 입력 HTML을 변경할 수 없습니다. – Mattis