Я использую CURL для извлечения страницы и хранения HTML. Я делаю это успешно и в конечном итоге с переменной, содержащей HTML, похожий на этот (содержание в тд не то же самое, и всегда изменяется):Анализ HTML-кода для поиска определенных элементов в PHP
html code above....
<tr class="myclass">
<td>Dynamic Content One</td>
<td>Dynamic Content Two</td>
<td>Dynamic Content Three</td>
</tr>
<tr class="myclass">
<td>Dynamic Content One</td>
<td>Dynamic Content Two</td>
<td>Dynamic Content Three</td>
</tr>
More of the same <tr> ......
html code below....
Моя цель сейчас, чтобы разобрать HTML и иметь ассоциативный массив называется результат (а), который хранит все <tr>
в качестве элементов, массив должен выглядеть следующим образом:
$result[0]["first_content"] = "Dynamic Content One"
$result[0]["second_content"] = "Dynamic Content Two"
$result[0]["third_content"] = "Dynamic Content Three"
$result[1]["first_content"] = "Dynamic Content One"
$result[1]["second_content"] = "Dynamic Content Two"
$result[1]["third_content"] = "Dynamic Content Three"
.. more elements in array depending on how many <tr> there was
Я нашел, что это тихое сложно разобрать что-то вроде этого. Я использовал модуль DOMdocument и модуль DOMXpath, но все, что я достиг, имеет массив, содержащий элементы для каждого <td>
, и не уверен, где я помещал алгоритмы для их хранения в массивы. Возможно, есть лучший способ сделать это? Вот мой текущий код:
$dom = new DOMDocument;
@$dom -> loadHTML($retrievedHtml);
$xPath = new DOMXpath($dom);
$xPathQuery = "//tr[@class='myclass']";
$elements = $xPath -> query($xPathQuery);
if(!is_null($elements)){
$results = array();
foreach($elements as $element){
$nodes = $element -> childNodes;
print $nodes -> nodeValue;
foreach($nodes as $node){
$results[] = $node -> nodeValue;
}
}
это работает. есть ли что-нибудь, за чем я должен следить? например, если nodetype не является XML_ELEMENT_NODE? не знаю, что это значит –